我有一个 Bash 函数,它"$@"
通过将其放入局部变量中来对整个参数进行一些字符串操作 ( ),如下所示:
my_func() {
local args="$@"
echo "args: <$args>"
}
my_func "$@"
Run Code Online (Sandbox Code Playgroud)
当我在 Bash 中运行它时,args
包含传递的所有参数:
$ bash foo.sh foo bar baz
args: <foo bar baz>
Run Code Online (Sandbox Code Playgroud)
但是,如果我在 Dash 中运行它,则仅存储第一个参数:
$ dash test.sh foo bar baz
args: <foo>
Run Code Online (Sandbox Code Playgroud)
阅读Ubuntu Wiki 的“Dash as /bin/sh”页面中的部分local
,似乎 Dash 正在local args="$@"
像这样扩展该行:
$ bash foo.sh foo bar baz
args: <foo bar baz>
Run Code Online (Sandbox Code Playgroud)
因此只将“foo”放入并将和args
声明为(本地?)变量。事实上,如果我在参数中添加并运行它,它似乎确认我正在添加变量:bar
baz
echo "bar: $bar"
my_func
=
$ dash test.sh …
Run Code Online (Sandbox Code Playgroud)