Bash,让普通字符串表现得像 $@ vs $*

Bash, get normal strings to behave like $@ vs $*

解法:

我最终用bash数组得到了它,我的解决方案是here


问题:

在bash中,我可以有一个参数有空格的函数,我可以使用$@$*来获得正确的引用:

$ _() { ruby -e 'p ARGV' "$@"; }; _ 'a b c' '1 2 3'
["a b c", "1 2 3"]

$ _() { ruby -e 'p ARGV' "$*"; }; _ 'a b c' '1 2 3'
["a b c 1 2 3"]

我正在构建一个字符串,其中参数可以有空格,并希望它的行为类似于 "$@",有没有办法做到这一点?

$ arg1="a b c"
$ arg2="1 2 3"
$ args="$arg2 $arg2"

# behaves like $*, but I want it to behave like $@
$ ruby -e 'p ARGV' "$args"
["1 2 3 1 2 3"]

$ ruby -e 'p ARGV' $args
["1", "2", "3", "1", "2", "3"]

Absolutely, use arrays.

$ args=()
$ args+=("a b c")
$ args+=("1 2 3")

$ ruby -e 'p ARGV' "${args[@]}"
["a b c", "1 2 3"]