$*与$@的异同

来源:互联网 发布:口袋妖怪x网络联机 编辑:程序博客网 时间:2024/04/30 13:18

两者都代表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 demoecho "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.


原创粉丝点击