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