跳到主要内容

解释Bash $* 和 $@ 有什么区别 ?

参考答案:

在 Bash shell 脚本中,$*$@ 都是用于表示传递给脚本或函数的参数列表的,但它们在引号内的行为有所不同。

  1. $*:

    • $* 没有被双引号包围时,它会被展开为所有的位置参数,每个参数作为独立的字符串。
    • "$*" 被双引号包围时,它会被展开为一个单一的字符串,其中所有的位置参数被空格分隔。

例如:

#!/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

每个参数都被视为独立的字符串。

总结

  • 当你想把参数当作一个整体字符串处理时,使用 "$*"
  • 当你想保持参数的独立性时,使用 "$@"

在大多数情况下,使用 "$@" 是更安全的,因为它避免了可能的参数分割和重新组合的问题。