Bashが私のドキュメントテキストの構文をチェックするのはなぜですか?

Bashが私のドキュメントテキストの構文をチェックするのはなぜですか?

私のファイルには次のコードブロックがあります。

175 MY_IP=`ifconfig eno1 | grep netmask | tr -s ' ' | cut -d " " -f 3`  
176 echo ""  > /home/hadoop/.ssh/config  
177 cat > /home/hadoop/.ssh/config  <<EOF  
178 Host `echo $MY_IP | sed 's/.[0-9][0-9]*$//g'`.* 0.0.0.0 master   worker*  
179    StrictHostKeyChecking no  
180    UserKnownHostsFile=/dev/null  
181 EOF  

ファイルに178〜181行を書きたいのですが、次のエラー出力が表示されます。

/script.sh: line 178: unexpected EOF while looking for matching `''
/script.sh: line 184: syntax error: unexpected end of file

構文を確認せずにそのテキストをコピーしないのはなぜですか?

更新:現在私のコードとエラーメッセージは次のとおりです。

175 MY_IP=`ifconfig eno1 | grep netmask | tr -s ' ' | cut -d " " -f 3`  
176 echo ""  > /home/hadoop/.ssh/config  
177 cat > /home/hadoop/.ssh/config  <<EOF  
178 Host `echo $MY_IP | sed "s/.[0-9][0-9]*$//g"`.* 0.0.0.0 master worker*  
179    StrictHostKeyChecking no  
180    UserKnownHostsFile=/dev/null  
181 EOF  
182   
183 chown -R hadoop:hadoop /home/hadoop  

/script.sh: 行 175: 一致する "" の検索中に予期しない EOF が発生しました。
/script.sh: 行 184: 構文エラー: 予期しないファイルの終わり

解決済み:コードを確認した後、最初の行に一重引用符がないことがわかりました。他とペアリングすると問題が解決します。

ベストアンサー1

シェルは`echo ...`ここのドキュメントでさまざまな種類の拡張を行います(ユーザーのようなコマンドの置換だけでなく、変数や算術拡張も含みます)。区切り文字を引用しない限り

比較する:

cat <<EOF
$$ $((2 + 3)) $(hostname) `date`
EOF
4502 5 fazq Mon Mar 11 23:03:27 EET 2019

比較:

cat <<'EOF'
$$ $((2 + 3)) $(hostname) `date`
EOF
$$ $((2 + 3)) $(hostname) `date`

最後のケースでは、二重引用符と一重引用符の両方が大丈夫です。

おすすめ記事