2016-08-03 20 views
1

私はパスでたくさん動き回ると、タイピングを最小限にするために、エイリアスセットを使用しようとしている:別名シェル変数間接参照

alias restore  'set restore=\!*; cd \$${restore}' 
alias save   'setenv \!* `pwd`' 

私はtcshを使用しています。保存は機能しますが復元は失敗します。

2% save x 
2% cd 
2% restore x 
$x: No such file or directory. 

私はvar(x)を検査していますので、正しく参照解除されていませんか?

答えて

0

これは動作します:

alias restore ' cd \$\!* ' 

これ(とあなたの元1)変数展開が起こる必要があるため、動作しません:あなたのオリジナルの試みは、より良いように書くことができ

alias restore ' cd ` echo $\!* ` ' 

まず、$がエスケープされているため、この場合は変数展開はありません。 !*が展開された後には、別の変数拡張が行われません。

私の提案する解決策では、サブシェルでechoを実行することによって$をエスケープすることは避けられます。


念のため、あなたは右、pushdpopdを知っていますか?ほとんどのユーザーにとって、これらは有用で強力ですが、ここでは別名の値を確かに見ることができます。

+0

ああ、プッシュ/ポップはシェル(pyeconとはちょっと変わった時代からのもの)に関するものでした。 ;-)私はプッシュ/ポップでそれらを駄目にしないので、保存/復元します。私はこれに設定しています、ありがとう: エイリアスリストア 'cd 'エコー$ \!*'; pwd ' – slashlos

関連する問題