我目前有一个这样的 bash 脚本,它成功调用了程序prog
:
#!/bin/bash
var1=hello
var2=world
prog <<EOF
$var1
$var2
EOF
而不是var1
and var2
,我将如何以相同的方式将数组(长度未知,因为我使用 $@)prog
中的每个元素传递给?
严格来说,你会想要类似的东西
for line in "$@"; do
echo "$line"
done | prog
这不是here文档,但它具有相同的效果。这里的文档和数组是为两个不同的用例开发的。
更严格地说,$@
它不是一个数组,尽管它非常努力地表现得像一个数组。:)
您可以遍历数组的每个元素并将每个值回显到程序中:
vars=('foo' 'foo bar' 'bar')
for var in "${vars[@]}"; do echo $var; done | prog
公平更新:@chepner 在这个答案上领先我几秒钟 :)
据我所知,你不能传递variables,但你可以传递arguments,所以这里有一个修复:
prog $VAR1 $VAR2 <<EOF
在里面prog
你可以使用:
ARR=($@)
将所有位置参数保存到变量ARR
中。