我在 tcsh 工作。如何为以下对象创建别名:
nc stop `nc list | awk '/Running/{print $1}'`
我尝试了以下各种变体:
alias ncstop "nc stop `nc list | awk '/Running/{print $1}'`"
但没有任何作用
答案1
您可以稍微更改一下引号,以便在使用别名之前不允许对反引号进行求值。
alias ncstop 'nc stop `nc list | awk '\''/Running/{print $1}'\''`'
这是可行的,因为当'
字符用于引用时,shell 不会解释诸如|
、$
和 之类的特殊字符backtick
。这允许这些特殊字符进入别名定义。但在定义别名的过程中,shell 会删除外层的'
。别名定义中实际的内容应该是:
nc stop `nc list | awk '/Running/{print $1}'`
该'\''
结构通常需要一些解释。但简而言之就是三个撇号。第一个结束前一个带引号的字符串,下一个(已转义以免被 shell 解释)通过,第三个开始另一个带引号的字符串。因此,该'\''
构造允许撇号(即:'
或single quote
)出现在单引号字符串内。
在需要遍历多层解释的字符串中正确获取所有引号和转义符很快就会变得混乱和复杂。对于这个问题,有一条评论建议 (for bash
) 考虑将别名实现为函数。我很确定同样可以建议tcsh
。