Mar*_*ers 62
从这里:
$ @的行为类似于$*,但是当引用时,如果参数中有空格,则它们会被正确分解.
以此脚本为例(取自链接的答案):
for var in "$@"
do
echo "$var"
done
Run Code Online (Sandbox Code Playgroud)
给出这个:
$ sh test.sh 1 2 '3 4'
1
2
3 4
Run Code Online (Sandbox Code Playgroud)
现在"$@"改为$*:
for var in $*
do
echo "$var"
done
Run Code Online (Sandbox Code Playgroud)
你得到这个:
$ sh test.sh 1 2 '3 4'
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
(通过使用谷歌找到的答案)
Art*_*wri 14
与我的POV的一个主要区别是"$ @"保留了原始参数数量.这是唯一的形式.因此,使用脚本传递args非常方便.
例如,如果文件my_script包含:
#!/bin/bash
main()
{
echo 'MAIN sees ' $# ' args'
}
main $*
main $@
main "$*"
main "$@"
### end ###
Run Code Online (Sandbox Code Playgroud)
我像这样运行它:
my_script 'a b c' d e
Run Code Online (Sandbox Code Playgroud)
我会得到这个输出:
MAIN看到了5个args
MAIN看到了5个args
MAIN看到1个args
MAIN看到3个args