1

次のconfigure.shファイルがあります(構成を含むtest.shファイルが作成されるため、最終的にそのtest.shをメイン構成タスクとして使用できます)。しかし、それは機能しません

cat > /var/tmp/test.sh << EOF
regex='value=(.*)'
for i in $(cat /var/tmp/test.ini);
do
    if [[ $i =~ $regex ]];
    then
        echo ${BASH_REMATCH[1]} 
        #or
        curl -v ${BASH_REMATCH[1]}
    fi
done
EOF

configure.sh が実行されると、reged='value(.*)' のように test.sh ファイルが完全に間違ったものになります。

for i in 
original line1
original line1
original line1
original line1
do
  if [[ =~ ]];
  then 
  fi

done
EOF

EOF ブロックは、上記で設定したとおりに正確に記述されていません。そのような文字列をEOF内にどのように記述しますか?

4

2 に答える 2

3

に変更<< EOF<< 'EOF'EOF最後のを変更しないでください。この方法でEOFを引用すると、Bashがヒアドキュメントで拡張を実行するのを停止します。

于 2011-10-31T08:45:25.277 に答える
0

からman bash、セクションヒアドキュメント

パラメータ展開、コマンド置換、算術展開、またはパス名展開はワードに対して実行されません。単語内の文字が引用符で囲まれている場合、区切り文字は単語の引用符を削除した結果であり、ヒアドキュメントの行は展開されません。

したがって、<< \EOFの代わりに記述し<< EOFます。

于 2011-10-31T08:45:20.720 に答える