我是bash的新手,我正在学习它,而且我怀疑使用$@和之间的真正区别S*.
我在这里红色Bash特殊参数
我知道两者都扩展到位置参数,但差异发生在双引号内.顺便说一句"$@" = "$1" "$2"..."$n"可能不同于"S*" = "$1$2...$n".
我尝试用一个简单的脚本来理解它:
if [ $# -gt 0 ]; then
echo "Your command line contains $# arguments"
else
echo "Your command line contains no arguments"
exit fi
echo "Params are: "
echo $@
echo $*
echo "$@"
echo "$*"
Run Code Online (Sandbox Code Playgroud)
如果我像这样在终端中执行我的脚本 ~./my_script par1 par2 par3
结果总是一样的:
Params are:
par1 par2 par3
par1 par2 par3
par1 par2 par3
par1 par2 par3
Run Code Online (Sandbox Code Playgroud)
也许我不明白这两个特殊变量的实际用途以及我的例子是否正确.我想用一个很好的例子来弄清楚这一点.
来自http://tldp.org/LDP/abs/html/refcards.html:
"$*" 所有位置参数(作为单个单词)*
“$@” 所有位置参数(作为单独的字符串)
此代码显示了这一点:给定一个由空格分隔的项目的字符串,$@将每个单词视为一个新项目,同时$*将它们全部视为相同的参数。
echo "Params for: \$@"
for item in "${@}"
do
echo $item --
done
echo "Params for : \$*"
for item in "${*}"
do
echo $item --
done
Run Code Online (Sandbox Code Playgroud)
测试:
$ ./a par1 par2 par3
Your command line contains 3 arguments
Params for: $@
par1 --
par2 --
par3 --
Params for : $*
par1 par2 par3 --
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
936 次 |
| 最近记录: |