区切り文書内で日付を印刷したいシェルスクリプトがあります。以下はコードの断片です。
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として読み取られますが、echo
stdin(またはfd)では読み込まれません。
さらに、コマンド置換とパラメータ拡張は区切り文書内で機能しますが(単語に引用符がない限り<< WORD
)、変数の割り当ては機能せず、文書外ではコマンド置換も機能しません。
ここで最終的に達成したいことが何であるかよくわかりません。 XYの問題のようですが、cat
これを使ってheredocを読むことができ、期待どおりに動作します。
var1=$(date)
cat <<EOF
$var1
EOF
または簡単に:
cat <<EOF
$(date)
EOF