别名 shell 变量取消引用
alias shell variable dereference
我经常在路径中移动,并尝试使用别名集来减少输入:
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),它没问题,所以我没有取消引用,对吗?
这个有效:
alias restore ' cd ` echo $\!* ` '
你原来的尝试最好写成:
alias restore ' cd $\!* '
这个(和你原来的那个)不起作用,因为首先需要进行变量扩展,在这种情况下没有变量扩展,因为 $
被转义了。 !*
扩展后,没有发生另一个变量扩展。
在我提出的解决方案中,我避免在子 shell 中通过 运行 和 echo
转义 $
,因此它工作正常。
只是为了确保,您知道 pushd
和 popd
,对吗?对于大多数用户来说,这些已经足够有用和强大了,不过我当然可以在这里看到你的别名的价值。
我经常在路径中移动,并尝试使用别名集来减少输入:
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),它没问题,所以我没有取消引用,对吗?
这个有效:
alias restore ' cd ` echo $\!* ` '
你原来的尝试最好写成:
alias restore ' cd $\!* '
这个(和你原来的那个)不起作用,因为首先需要进行变量扩展,在这种情况下没有变量扩展,因为 $
被转义了。 !*
扩展后,没有发生另一个变量扩展。
在我提出的解决方案中,我避免在子 shell 中通过 运行 和 echo
转义 $
,因此它工作正常。
只是为了确保,您知道 pushd
和 popd
,对吗?对于大多数用户来说,这些已经足够有用和强大了,不过我当然可以在这里看到你的别名的价值。