完整版 Linux技巧:使用 bash function 命令自定义函数( 四 )


That is, "$@" is equivalent to "$1" "$2" ...
注意:$@ 和 "$@" 这两种写法得到的结果可能会有所不同 。$@ 是扩展为 $1 $2 ...,而 "$@" 是扩展为 "$1" "$2" ...
修改上面的 testparams.sh 脚本来举例说明 $@ 和 "$@" 的区别:
#!/bin/bashfunction show_params(){echo $1 , $2 , $3}show_params $@show_params "$@"执行 testparams.sh 脚本,输出结果如下:
$ ./testparams.sh 1a 2b 3c1a , 2b , 3c1a , 2b , 3c$ ./testparams.sh "1 a" "2 b" "3 c"1 , a , 21 a , 2 b , 3 c$ ./testparams.sh 1a 2b1a , 2b ,1a , 2b ,可以看到,当传入脚本的参数值不带空格时,$@ 和 "$@" 得到的结果相同 。
当传入脚本的参数值自身带有空格时,$@ 得到的参数个数会变多,"$@" 可以保持参数个数不变 。
上面的 $1 是 "1 a",$@ 会拆分成 "1" "2" 两个参数,然后传给 show_params 函数;"$@" 会保持为 "1 a" 不变,然后传给 show_params 函数 。
即,"1 a" "2 b" "3 c" 这三个参数,经过 $@ 处理后,得到的是 "1" "a" "2" "b" "3" "c" 六个参数 。
经过 "$@" 处理后,得到的还是 "1 a" "2 b" "3 c" 三个参数 。
同时也看到,即使只传入两个参数,引用 $3 也不会报错,只是会获取为空 。




推荐阅读