$*与$@的异同

两者都代表bash命令行参数,在没有用双引号括起来的时候,两者效果一样

但是两者若被双引号括起来,就有不同了

$*会显示出参数见的分隔符,而$@则不会。这是因为前者被解读为一个整体字符串,而后在解读为一个个分开的字符串


参考文献:http://bash.cyberciti.biz/guide/$IFS


IFS Effect On The Values of "$@" And "$*"

  • $@ and $* are special command line arguments shell variables.
  • The $@ holds list of all arguments passed to the script.
  • The $* holds list of all arguments passed to the script.
  • Create a shell script called ifsargs.sh:
#!/bin/bash
# ifsargs.sh - Cmd args - positional parameter demo
echo "Command-Line Arguments Demo"
echo "*** All args displayed using \$@ positional parameter ***"
echo $@
echo "*** All args displayed using \$* positional parameter ***"
echo $*

Save and close the file. Run it as follows:

chmod +x ifsargs.sh
./ifsargs.sh honda yamaha harley-davidson kawasaki

Sample outputs:

Command-Line Arguments Demo
*** All args displayed using $@ positional parameter ***
honda yamaha harley-davidson kawasaki
*** All args displayed using $* positional parameter ***
honda yamaha harley-davidson kawasaki
  • As you can see, the values of $@ and $* are same.
  • However, the values of "$@" and "$*" are different (note double quotes).
  • Edit ifsargs.sh as follows
#!/bin/bash
# ifsargs.sh - Cmd args - positional parameter demo
 
#### Set the IFS to | ####
IFS='|'
 
echo "Command-Line Arguments Demo"
 
echo "*** All args displayed using \$@ positional parameter ***"
echo "$@"        #*** double quote added ***#
 
echo "*** All args displayed using \$* positional parameter ***"
echo "$*"        #*** double quote added ***#

Save and close the file. Run it as follows:

./ifsargs.sh honda yamaha harley-davidson kawasaki

Sample outputs:

Command-Line Arguments Demo
*** All args displayed using $@ positional parameter ***
honda yamaha harley-davidson kawasaki
*** All args displayed using $* positional parameter ***
honda|yamaha|harley-davidson|kawasaki
  • $@ expanded as "$1" "$2" "$3" ... "$n"
  • $* expanded as "$1y$2y$3y...$n", where y is the value of IFS variable i.e. "$*" is one long string and $IFS act as an separator or token delimiters.


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值