Alias

使用反引號為 cmd 創建別名

  • April 19, 2022

我在tcsh工作。如何創建別名:

nc stop `nc list | awk '/Running/{print $1}'`

我嘗試了各種變體:

alias ncstop "nc stop `nc list | awk '/Running/{print $1}'`"

但沒有工作

您可以稍微更改引用以在使用別名之前不允許評估反引號。

alias ncstop 'nc stop `nc list | awk '\''/Running/{print $1}'\''`'

這是有效的,因為當'字元用於引用時,shell 不會解釋特殊字元,例如|,$和。backtick這允許這些特殊字元進入別名定義。'但是在定義別名的過程中,shell 會移除’s 的外層。別名定義中的實際結果應該是:

nc stop `nc list | awk '/Running/{print $1}'`

'\''構造通常可以使用一點解釋。但簡而言之,它是三個撇號。第一個結束前一個帶引號的字元串,下一個(被轉義以便不被 shell 解釋)通過,第三個開始另一個帶引號的字元串。因此,該'\''構造允許撇號(即:'single quote)出現在單引號字元串內。

在需要遍歷多層解釋的字元串中正確獲取所有引號和轉義符會很快變得混亂和復雜。對建議 (for bash) 研究將別名實現為函式的問題有評論。我很確定也可以為tcsh.

引用自:https://unix.stackexchange.com/questions/339328