$@ 与 $*
-
$@
与$*
均表示脚本的输入参数列表, 在不使用""
的情况下二者完全相同
输入参数的字符串将以IFS分割成单个输入参数for i in $@: do echo '$@: '$i done ########################## for i in $*: do echo '$*: '$i done # |- bash 111.sh aa bb cc # $@: aa # $@: bb # $@: cc # $*: aa # $*: bb # $*: cc: # |- bash 111.sh aa "bb cc" # $@: aa # $@: bb # $@: cc # $*: aa # $*: bb # $*: cc:
-
使用
""
包住时, 有以下几个区别
如下示例, 分别以bash 脚本名 aa bb cc
和bash 脚本名 aa "bb cc"
作为启动命令, 查看不同输出-
"$*"
: 强调整体for i in "$*": do echo '"$*":'$i done # |- bash 111.sh aa bb cc # "$*":aa bb cc # |- bash 111.sh aa "bb cc" # "$*":aa bb cc
-
"$@"
: 强调个体for i in "$@": do echo '"$@":'$i done # |- bash 111.sh aa bb cc # "$@":aa # "$@":bb # "$@":cc # |- bash 111.sh aa "bb cc" # "$@":aa # "$@":bb cc
-
II. 字符串的默认值
-
用默认值初始化
- 使用
${val1-$val2}
的意思是: 如果val1为null, 则取val2的值 - 使用
${val1:-$val2}
的意思是: 如果val1为null或空字符串时, 取val2的值default="hello world" val1=${1:-$default} echo $val1 # bash 111.sh # hello world # bash 111.sh haha # haha
- 使用
-
繁琐写法: 条件判断
default="hello world" if [ $# -eq 1 ] then default=$1 fi echo $default
网友评论