shell中的$IFS变量和$*

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(默认为空格)来划分字段,如果空格在 “”里面则不不划分。

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小龙在山东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值