いくつかのアリスを読んだ後、試してみたかったのですが、うまくいきませんでした。このエイリアスが機能しないのはなぜですか?
$ printenv PWD
/home/vm
$ alias testpwd="$PWD"
$ testpwd
-bash: /home/vm: Is a directory
しかし、echoを使ってこれを行うと本当にうまくいきますか?
$ alias testpwd="echo $PWD"
$ testpwd
/home/vm
なぜ最初のテストが成功しなかったのか分かりませんか?
答え1
どちらの例も指示どおりに実行されるため、うまく機能します。このalias
コマンドは、定義の残りの部分を表す単語を定義します。
alias testpwd="echo $PWD"
testpwd
コマンドの最初の単語として使用される場合は、その単語をecho $PWD
。ただし、コマンド拡張は二重引用符で囲まれているため、$PWD
コマンドの実行時に値が評価されます。定義。したがって、この場合はecho /home/vm
実行するたびtestpwd
に/home/vm
。現在のの価値$PWD
。 (通常のように「二重引用符」の代わりに「一重引用符」を使用すると、シェルが変数をすぐに評価するのを防ぐことができます。)
最初の例は同じ方法で動作します。この定義は次のことをtestpwd
意味します"$PWD"
。
alias testpwd="$PWD"
これで、エイリアスが定義されたときの現在の値、つまり置き換えられることをtestpwd
(以前と同じように)考慮することができ"$PWD"
ます/home/vm
。これは現在のディレクトリをコマンドとして実行しようとしますが、大幅に失敗します。
-bash: /home/vm: Is a directory