Linux
在 tcsh 別名中使用 sed 時出錯
我無法“獲取/執行”我的
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
.