コマンドの結果が変数に割り当てられていません。

コマンドの結果が変数に割り当てられていません。

私はBASHとシェルスクリプトの経験がかなり不足しているので、ご了承ください。

$ toda=$(date) | echo $toda

教えてください:2020年5月29日金曜日15:25:19 CEST。今まではそんなに良くなった。

datediff は dateutils パッケージの一部であり、日付間の日数を返します。

datediff 2019-12-31 2020-05-29

私に: 150. 繰り返しますが、これまではとても良かったです。しかし:

toda=$(datediff 2019-12-31 2020-05-29) | echo $toda

戻り値: Fr 29 May 2020 15:25:19 CESTの代わりに(予想どおり)150。つまり、datediff結果を割り当てずに前のジョブの値を変更せずに残します。もちろん私は次のことを試しました。

anothervarname=$(datediff 2019-12-31 2020-05-29) | echo $anothervarname

空の変数(つまり、プロンプトの上の空行)を返します。上記の例のdatediff結果を変数に割り当てるにはどうすればよいですか?ご協力ありがとうございます。

答え1

'|' は、あるコマンドの出力を次のコマンドにリダイレクトするために使用されます。あなたの場合、最初のコマンドは変数に値を割り当てるため、出力は生成されません。

あなたが使用する必要があるのは:(これを試してみてください)

toda=$(date) && echo "$toda"

&&-> 後続のコマンドは、最初のコマンドが成功した場合にのみ実行されます。 AND演算子。

関連情報