シェルコマンドの代替違い/例外

シェルコマンドの代替違い/例外

Bashでスクリプトを作成するときに、次の構造を使用してコマンド出力に変数を割り当てる方法を学びました。

variable=$(command-string)

これをコマンド置換と呼び、サブシェル環境でコマンド文字列の内容を実行します。

何か異常な点を見つけたかもしれません。

この形式のコマンド置換を実行するときに変数の割り当てがない場合、結果は異なります。

例:

cmd=date
var=$(echo $cmd)
echo $var
$(echo $cmd)

出力:

date
Fri Jun 29 15:11:58 EDT 2018

変数割り当てなしのコマンド置換は、コマンド実行の標準出力を評価したいようですが、変数割り当てはそうではありません。

ベストアンサー1

コマンド置換は次のように評価されます。date

何も割り当てていないので、デフォルトではdateコマンドプロンプトに入力するだけです。

$ set -x
$ cmd=date
+ cmd=date
$ var=$(echo $cmd)
++ echo date
+ var=date
$ echo $var
+ echo date
date
$ $(echo $cmd)
++ echo date
+ date
Fri Jun 29 13:26:55 MDT 2018

date有効なコマンドなので、期待どおりに実行されます。

おすすめ記事