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
難しいです。)