スクリプトは次のとおりです:
#!/bin/bash
thedate=$(date)
var='Current date is $thedate'
echo $var
出力は「現在の日付は $thedate です」です。日付を表示させたいのですが、何が間違っているのでしょうか? ご助力いただければ幸いです。
答え1
問題は、bash
を使用しない限り、 は環境変数を 1 回しか展開しないためeval
、コマンド ラインが 2 回解析されることです。
eval echo $var
表示される日付と時刻は、 が参照された時点のものthedate
ではなく、 が設定された時点のものであることに注意してください$var
。 が参照された時点の時刻を表示するには$var
、次のものが必要です。
var='Current date is $(date)'
eval echo $var
変数を使用するのではなく、関数を定義する方が良いでしょう:-
cdate() { echo Current date is $(date); }
...
cdate
もちろん、 を使用しない方がまだ良いのですecho
が、 letdate
自体に余分なテキストを追加します。
cdate() { date +"Current date is %c"; }
これはデフォルトとまったく同じ形式を出力しませんdate
が、デフォルトには形式指定子がありません。
答え2
var='Current date is $thedate'
変数は一重引用符内では展開されないため、リテラル テキストを含む文字列が割り当てられます$thedate
。変数を展開するには、ここで二重引用符を使用する必要があります。
echo $var
また、ここでは、変数を二重引用符で囲んで、単語分割やパス名拡張の対象にならないようにする必要がありますecho "$var"
。つまり、 です。この特定のケースでは、日付にワイルドカード文字が含まれない可能性が高いため、引用符を使用しなくてもほとんどの場合は問題ありません。ただし、引用符を使用しない場合、たとえば日付文字列は のようにFri Dec 7 20:41:21 EET 2018
出力されますFri Dec 7 20:41:21 EET 2018
。つまり、月名の後の二重スペースが単一のスペースに縮小されます。
答え3
一重引用符の代わりに二重引用符を使用してください。Bash は一重引用符内の変数を展開しません。