我无法“获取/运行”我的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/>$//'`"
- 第一个问题 = 解决不兼容的变量错误(同时获取别名文件)
- 第二个问题 = 我可以在单个别名中拥有两个输出吗
答案1
中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$
后跟空格、制表符或行尾,则原样传递。
别名的最简单方法可能是在 之前/之后开始/停止双引号\$
:
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
。