IFS表示 Internal Field Separator (内部字段分隔符)
$IFS
在Linux下写下如下脚本:
test1.sh
string1="1 2 3 4"
echo $string1
echo "$string1"
- 1
- 2
- 3
输出:
1 2 3 4
1 2 3 4
- 1
- 2
test2.sh
string2="1 2 3 4"
echo $string2
echo "$string2"
- 1
- 2
- 3
输出:
1 2 3 4
1 2 3 4
- 1
- 2
这是因为$IFS
默认是空字符(空格Space、Tab、换行\n),把相邻的连续的分割符合并到了一起。而利用双引号包裹的字符串实际上是屏蔽了IFS的作用,当我做如下修改的时候那么输出就完全一致了。
IFS='-'
string2="1 2 3 4"
echo $string2
echo "$string2"
- 1
- 2
- 3
- 4
这样就一样了:
1 2 3 4
1 2 3 4
- 1
- 2
再证明一下:
IFS='-'
string2="1--2--3--4"
echo $string2
echo "$string2"
- 1
- 2
- 3
- 4
输出:
1 2 3 4
1--2--3--4
- 1
- 2
影响$*
$*
和$@
都是返回所有参数。
test2.sh
IFS="&"
echo $*
echo "$*"
echo $@
echo "$@"
- 1
- 2
- 3
- 4
- 5
运行bash test3.sh 1 2 3
输出:
1 2 3
1&2&3
1 2 3
1 2 3
- 1
- 2
- 3
- 4
$*
将所有的参数认为是一个字段.
$@
以IFS(默认为空格)来划分字段,如果空格在 “”里面则不不划分。
评论记录:
回复评论: