Bashのエイリアス変数

Bashのエイリアス変数

Bashスクリプトで奇妙な動作を見つけました。

#!/bin/bash
V=a
alias $V="echo test"
echo $(a)                 #returns 'test'
echo $($V)                #returns ...'a: not found'

変数を使用して以前の動作をシミュレートする方法はありますか?

ベストアンサー1

エイリアスは、コマンドが拡張なしでコードに直接表示される場合にのみ拡張されます。\a、など$Vを書くと、$(echo a)エイリアス照会が抑制されます。

また、bash(他のシェルとは異なり)は基本的にスクリプトのエイリアスを拡張しないため、a実際には次のようになります。いいえBashでエイリアスを実行します。

エイリアスの代わりに関数を使用してください。関数を定義するには、元の名前を使用する必要があります。

V=a
a () { echo test; }
"$V"     # prints test

( を使用して目的を達成する他の方法がありますが、eval実行している作業を正確に知らない限り、使用しないでくださいeval。正しい引用がeval難しいです。)

おすすめ記事