[英]Loop inside "heredoc" in shell scripting
我需要在具有参数化值的交互式程序/实用程序中执行一系列命令。 有没有办法在 heredoc 中循环? 如下所示.. 不确定eval
在这里是否有任何帮助。 下面的示例似乎不起作用,因为交互式似乎无法识别系统命令。
#!/bin/sh
list="OBJECT1 OBJECT2 OBJECT3"
utilityExecutable << EOF
for i in $list ; do
utilityCommand $i
done
EOF
与其将此处的文档传递给utilityExecutable
, utilityExecutable
将所需的文本传递给它。 您可以在for循环中使用echo
语句创建所需的文本,并将整个循环输出通过管道传递到utilityExecutable
:
#!/bin/sh
list="OBJECT1 OBJECT2 OBJECT3"
for i in $list; do
echo "utilityCommand $i"
done | utilityExecutable
是的,这很棘手,可能会造成混淆! 您必须按照以下步骤修改代码。
#!/bin/sh
list="OBJECT1 OBJECT2 OBJECT3"
utilityExecutable << EOF
list="$list"
for i in \$list ; do
utilityCommand \$i
done
EOF
这是因为Heredoc使用了自己的变量,这些变量与Shell完全分开。 当您进入heredoc时,必须使用和修改heredoc自己的变量。 因此,在heredoc中时,需要\\ $引用heredoc自己的变量,而不是shell变量。
cat << EOF
$(
for i in {1..10}; do
echo $i;
done
)
EOF
commandxyz -noenv<<EOF
echo "INFO - Inside eof"
t_files=("${p_files[@]}")
#copy array
#echo \${t_files[*]}
#all elements from array
#echo \${#t_files[@]}
#array length
for i in \${t_files[@]} ; do
echo -e \$i;
do other stuff \$i;
done
cat $patch_file
git apply $patch_file
EOF
myVar=$(
for i in {1..5}; do
echo hello;
echo world;
done;
); cat <<< $myVar
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.