Linux

在 tcsh 別名中使用 sed 時出錯

  • May 10, 2019

我無法“獲取/執行”我的tcsh別名,如下所示:

alias inp1 "grep -i "final_model" /scr/cb2TempProd/tmp/$USER/\!:1/Simulation/Input/assemble.preprocessing | sed 's#.*<##; s/>$//'"
  • 其中\!:1= 手動輸入
  • 所需輸出 =/scr/cb2TempProd/tmp/$USER/test/Simulation/Input/X1_X_XXXX_XXXXXX15X_H10EK011.inp
  • 我將在所需輸出上使用額外的別名(預定義)=
alias inp2 "gdyn `grep -i "final_model" /scr/cb2TempProd/tmp/$USER/\!:1/Simulation/Input/assemble.preprocessing | sed 's#.*<##; s/>$//'`"

  • 第一個問題=解決不兼容的變數錯誤(在採購別名文件時)
  • 第二個問題=我可以在單個別名中同時擁有兩個輸出嗎

csh中,變數替換總是出現在雙引號內,並且不能被反斜杠阻止:

% echo "$"
Illegal variable name.
% echo "\$"
Variable name must contain alphanumeric characters.
% echo "\\$"
Variable name must contain alphanumeric characters.
% echo \$
$

這與 bourne shell 不同,並記錄在手冊頁中

$$ 1 $$:

在輸入行被別名和解析之後,在每個命令被執行之前,變數替換被執行,以$字元為鍵。這種擴展可以通過在雙引號 ( ) 內$加一個\except 來防止**,它總是出現**,而在單引號 ( ) 內,它從不出現。反引號 ( ) 引用的字元串稍後會被解釋(請參閱下面的命令替換),因此直到稍後才會發生替換,如果有的話。如果 A 後跟一個空格、製表符或行尾,則 A 將按原樣傳遞。"'``` ```$``$

別名的最簡單方法可能是在 之前/之後開始/停止雙引號\$

alias inp1 "grep -i 'final_model' /scr/cb2TempProd/tmp/$USER/\!:1/Simulation/Input/assemble.preprocessing | sed 's#.*<##; s/>"\$"//'"

對於您的第二個別名,我認為您應該簡單地重複使用inp1而不是嘗試將其粘貼到:

alias inp2 'gdyn `inp1 \!:1`'

$$ 1 $$那是 的聯機幫助頁csh,但引用和替換在tcsh.

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