使用perl one-liner的Csh别名在创建别名时评估,而不是在使用别名时评估

ste*_*nmm 3 perl alias csh

我知道,我知道,我应该使用现代的shell ...无论如何,所以这里是别名:

  alias p4client echo `p4 info | perl -ne 's/Client name: (.*)$/print $1/e'` 
Run Code Online (Sandbox Code Playgroud)

我也知道可能有更好的方法来获取p4客户端名称.这只是一个例子.那么,当我调用别名而不是评估何时创建别名时,有人能告诉我一个很好的,干净的方法来评估这个吗?

yst*_*sth 7

唯一的技巧是反斜杠转义单引号并用单引号包围其他所有内容:

alias p4client 'echo `p4 info | perl -ne '\''s/Client name: (.*)$/print $1/e'\''`'
Run Code Online (Sandbox Code Playgroud)

虽然perl可以简化:

alias p4client 'echo `p4 info | perl -ne '\''print /Client name: (.*)/'\''`'
Run Code Online (Sandbox Code Playgroud)

并且回声和``说捕获输出这些命令打印并打印它; 只是打印输出(只有perl包含换行而不是从p4输出中剥离它只是让echo重新添加它):

alias p4client 'p4 info | perl -ne '\''print /Client name: (.*)/s'\'
Run Code Online (Sandbox Code Playgroud)

虽然现在没有什么双引号不友好留在那里,所以:

alias p4client "p4 info | perl -ne 'print /Client name: (.*)/s'"
Run Code Online (Sandbox Code Playgroud)

除了在p4client之后没有=之外,这里没有什么不同于你在bash中的表现.