如何正确地对$@进行赋值
$@
比较特殊,跟一般的 $VAR
都不一样. 当进行赋值时通常需要把 $@
赋值给数组变量,否则在处理由引号括起来的带空格的参数时就可能会有问题了.
下面是举几个例子作为演示:
遍历 "$@" 的效果:
function test { for var in "$@";do echo $var done } test 1 "2 3" 4
1 2 3 4
用一般变量commands保存 "$@",并遍历 "$commands"
function test { commands="$@" for var in "$commands";do echo $var done } test 1 "2 3" 4
1 2 3 4
发现所有参数都合并成一行
1 2 3 4
用一般变量commands保存 "$@",并遍历 $commands
function test { commands="$@" for var in $commands;do echo $var done } test 1 "2 3" 4
1 2 3 4
发现只输出中把参数
2 3
e拆分开了.用数组变量commands保存 "$@",并遍历 "$commands"
function test { commands=("$@") for var in "${commands[@]}";do echo $var done } test 1 "2 3" 4
1 2 3 4
这次的结果总算是正确的了.
总结起来,要正确地对 $@
进行赋值要注意以下几点:
使用数组变量保存
$@
的值:commands=("$@")
便利数组变量时,需要使用带引号的@进行遍历
for var in "${commands[@]}";do done