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

时间:2015-03-09 04:14:00

标签: bash quoting

解决方案:

我最终得到了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"]

1 个答案:

答案 0 :(得分:2)

Absolutely, use arrays.

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

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