簡體   English   中英

在 shell 腳本中循環“heredoc”

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

與其將此處的文檔傳遞給utilityExecutableutilityExecutable將所需的文本傳遞給它。 您可以在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM