传递一个输入变量并将其循环到这里的文档bash脚本中

时间:2016-06-21 13:17:47

标签: bash heredoc

我正在尝试解决一个问题,即我需要将用户输入传递到此处文档并循环其值。我一次只能做一件事,无论是通过变量还是循环。两者都不起作用。

以下是我的代码。

bash <<START
echo "Input :$1"
for i in 1 2 3 4 5
do
echo "For Loop Value : $i"
done
START

运行此脚本时./heredoc&#34; asd&#34;我正在低于产量

Input :asd
For Loop Value :
For Loop Value :
For Loop Value :
For Loop Value :
For Loop Value :

正如你所看到的,i的价值还没来。

但如果我添加单引号,则会给出以下输出。

Input :
For Loop Value :1
For Loop Value :2
For Loop Value :3
For Loop Value :4
For Loop Value :5

我如何解决它,以便我的输入值和循环值应该输出。

提前致谢

1 个答案:

答案 0 :(得分:2)

你没有传递任何东西。 $1将是正在运行的shell的第一个位置参数,可能是一个空字符串。

这将做你想要的:

variable="hello there"

bash <<SCRIPT_END
echo "Input: $variable"
for i in 1 2 3 4 5; do
    echo "For Loop Value: \$i"
done
SCRIPT_END

您必须转义here-document中的$i,否则将使用当前环境中任何变量i的值进行插值(如果未设置,则为空字符串)。

请注意,您执行希望$variable(您所谓的&#34;传递到here-document&#34;)以及为什么我们这样做不能单引引整件事(通过将第一个SCRIPT_END更改为'SCRIPT_END')。