解释Bash $* 和 $@ 有什么区别 ?
参考答案:
在 Bash shell 脚本中,$*
和 $@
都是用于表示传递给脚本或函数的参数列表的,但它们在引号内的行为有所不同。
-
$*
:- 当
$*
没有被双引号包围时,它会被展开为所有的位置参数,每个参数作为独立的字符串。 - 当
"$*"
被双引号包围时,它会被展开为一个单一的字符串,其中所有的位置参数被空格分隔。
- 当
例如:
#!/bin/bash
for arg in "$*"; do
echo "$arg"
done
如果脚本是这样调用的:./script.sh arg1 arg2 arg3
,那么上述脚本将输出:
arg1 arg2 arg3
所有参数被视为一个单独的字符串。
2. $@
:
* 不论是否被双引号包围,`$@` 都会展开为所有的位置参数,但每个参数都是独立的。
例如:
#!/bin/bash
for arg in "$@"; do
echo "$arg"
done
如果脚本是这样调用的:./script.sh arg1 arg2 arg3
,那么上述脚本将输出:
arg1
arg2
arg3
每个参数都被视为独立的字符串。
总结:
- 当你想把参数当作一个整体字符串处理时,使用
"$*"
。 - 当你想保持参数的独立性时,使用
"$@"
。
在大多数情况下,使用 "$@"
是更安全的,因为它避免了可能的参数分割和重新组合的问题。