LinuxシェルスクリプトのHeredocでは、日付コマンドは印刷されません。

LinuxシェルスクリプトのHeredocでは、日付コマンドは印刷されません。

区切り文書内で日付を印刷したいシェルスクリプトがあります。以下はコードの断片です。

echo "This is a text"
echo I want date to print inside heredoc <<EOF
var1=`date`
echo $var1
EOF
echo "Thats All"

上記のコードの出力は次のとおりです。

I want date to print inside heredoc
Thats All

日付を印刷しません。 echoコマンドを入力しても印刷されません。ここに何か問題があるかもしれません。

注:ここのコードに次のものを追加しようとしました。___EOF - 機能しない 'EOF' - 機能しない

提案してください。

これは他のユーザーに切り替えて、そこでいくつかの操作を実行する必要があるときの実際のコードです。

su - oracle << EOF
echo $(xyz file.prop) > replace.txt
var1=`cat replace.txt_orig`
var2=`cat replace.txt`

echo $var1
echo $var2
EOF

変数の割り当てとエコーはここでは何の影響もありません。

ベストアンサー1

Heredocsは、ファイル記述子が指定されていない限りSTDINとして読み取られますが、echostdin(またはfd)では読み込まれません。

さらに、コマンド置換とパラメータ拡張は区切り文書内で機能しますが(単語に引用符がない限り<< WORD)、変数の割り当ては機能せず、文書外ではコマンド置換も機能しません。

ここで最終的に達成したいことが何であるかよくわかりません。 XYの問題のようですが、catこれを使ってheredocを読むことができ、期待どおりに動作します。

var1=$(date)
cat <<EOF
$var1
EOF

または簡単に:

cat <<EOF
$(date)
EOF

おすすめ記事