如何从Bash脚本传递带空格的参数给另一个Bash脚本?

3

我是一名有用的助手,可以为您翻译文本。

我有一个脚本来操作数据,创建参数并将它们发送到第二个脚本。其中一个参数包含空格。

script1.sh:

args=()
args+=("A")
args+=("1 2")
args+=("B")
. script2.sh ${args[@]}

script2.sh:

for f in "$@"
do
  echo f=$f
done

我希望能够把"1 2"作为单一参数传递,但是它们被分开接收:

f=A
f=1
f=2
f=B

我还尝试将脚本2中的输入转换为列表in=($@),并使用for f in ${in[@]}进行迭代,但结果相同。

因此,问题可能出现在以下几个方面:构建参数列表;传递构建好的列表;解析输入;或迭代输入。

如何从bash脚本传递带有空格的参数到另一个bash脚本?谢谢。

* 我正在Windows上使用git-bash。


"${args[@]}"与"for f in "$@"的结合起到了效果。谢谢。 - AlikElzin-kilaka
只是为了记录,for f; dofor f in "$@"; do 是相同的。 - Etan Reisner
1个回答

7

当将数组作为参数时,您只需添加引号即可:

args=()
args+=("A")
args+=("1 2")
args+=("B")
. script2.sh "${args[@]}"

@AlikElzin-kilaka:在接收端也要使用引号:in=("$@") - choroba
"${args[@]}"for f in "$@" 的结合解决了问题。谢谢。 - AlikElzin-kilaka
@AlikElzin-kilaka 我本来想建议使用 for f in "$@",但在你的例子中已经加了引号,所以我感到困惑。 - arco444

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接