[英]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.