eval
これらの命令と命令alias
の違いは何ですか?
例:
x=‘ls -d -l $HOME’
$x
eval $x
alias y=‘ls -l -d $HOME’
y
ベストアンサー1
主に意味論。コマンド文字列を変数に結合することはスクリプトには便利ですが、エイリアシングには適していません。明らかな理由の1つは完成です。bash_completion
エイリアスを処理できるものなど、さまざまな完成スクリプトがありますが(悲しいことに私にはこれは起こりませんでした)、変数がコマンドで拡張可能であると仮定すると、やや混乱する可能性があります。
2番目の理由は、魔法のコマンドや文字(実行など)alias
を使用せずにコマンドショートカットを作成できることです。$
これにより、交換が透明になり、一部のプログラムのデフォルト設定を上書きできます。良い例は、ls
別名としてデフォルト値が指定されていることですls --color=auto
。ユーザーはカラー出力を見るためにこれを知る必要はありません。一部のディストリビューションにはrm
エイリアスと関連コマンドがあり、rm -i
インタラクティブモードで動作し、誤って削除されるのを防ぎます。
一方、変数はバイナリをエミュレートする必要がない特定の目的に役立ちます。広範で良い例はEDITOR
環境変数です。お気に入りのエディタを実行するために使用できるだけでなく、$EDITOR
(シェルにアクセスできない)他のプログラムをアクティブにしてそれを実行し、実行環境でその値を取得することもできます。
私が認識していない他のことが進んでいる可能性がありますが、結果は同じです。コマンドは意図したとおりに機能します。