1

我目前有一个这样的 bash 脚本,它成功调用了程序prog

#!/bin/bash
var1=hello
var2=world
prog <<EOF
$var1
$var2
EOF

而不是var1and var2,我将如何以相同的方式将数组(长度未知,因为我使用 $@)prog中的每个元素传递给?

4

3 回答 3

2

严格来说,你会想要类似的东西

for line in "$@"; do
    echo "$line"
done | prog

这不是here文档,但它具有相同的效果。这里的文档和数组是为两个不同的用例开发的。

更严格地说,$@它不是一个数组,尽管它非常努力地表现得像一个数组。:)

于 2013-06-06T15:33:47.240 回答
2

您可以遍历数组的每个元素并将每个值回显到程序中:

vars=('foo' 'foo bar' 'bar')
for var in "${vars[@]}"; do echo $var; done | prog

公平更新:@chepner 在这个答案上领先我几秒钟 :)

于 2013-06-06T15:34:11.783 回答
-1

据我所知,你不能传递variables,但你可以传递arguments,所以这里有一个修复:

prog $VAR1 $VAR2 <<EOF

在里面prog你可以使用:

ARR=($@)

将所有位置参数保存到变量ARR中。

于 2013-06-06T15:35:16.887 回答