我有一个 Bash 脚本,它生成、存储和修改数组中的值。这些值稍后用作命令的参数。
对于 MCVE,我想到了任意命令bash -c 'echo 0="$0" ; echo 1="$1"'
这解释了我的问题。我将用两个参数调用我的命令-option1=withoutspace
and -option2="with space"
。所以它看起来像这样
> bash -c 'echo 0="$0" ; echo 1="$1"' -option1=withoutspace -option2="with space"
如果对命令的调用直接键入到 shell 中。它打印
0=-option1=withoutspace
1=-option2=with space
在我的 Bash 脚本中,参数是数组的一部分。然而
#!/bin/bash
ARGUMENTS=()
ARGUMENTS+=('-option1=withoutspace')
ARGUMENTS+=('-option2="with space"')
bash -c 'echo 0="$0" ; echo 1="$1"' "${ARGUMENTS[@]}"
prints
0=-option1=withoutspace
1=-option2="with space"
它仍然显示双引号(因为它们是按字面解释的?)。有效的是
#!/bin/bash
ARGUMENTS=()
ARGUMENTS+=('-option1=withoutspace')
ARGUMENTS+=('-option2=with space')
bash -c 'echo 0="$0" ; echo 1="$1"' "${ARGUMENTS[@]}"
再次打印
0=-option1=withoutspace
1=-option2=with space
我必须做出什么改变ARGUMENTS+=('-option2="with space"')
工作以及ARGUMENTS+=('-option2=with space')
?
(也许将命令的参数存储在数组中甚至是完全错误的?我愿意接受建议。)