我怎样才能$
在 csh 中逃脱?在 <双引号> ( ""
) 内。我正在尝试这样做,但无法逃脱 <dollar> 符号 ( $
)
alias e "echo \\!:2-$"
这有效,但不足以满足我的需求
alias e echo \\!:2-$
尝试使用单引号代替 - alias e 'echo \!:2-$'
。您还需要反斜杠转义历史替换。
对这个老问题提出的答案是不正确的。
它可以在 CSH 和其他 shell 中完成,无论使用哪种引号,但对于某些 shell,如果使用双引号,则需要先退出双引号。
以下应该适用于(几乎)所有的 shell,所以为了简单起见,我使用它。我使用反引号来获取命令的输出,因为它更易于遵循并且避免需要添加额外的“$”符号(更现代的风格)。注意“$”的不同用法,实际获取变量和作为文字(为了方便起见,在单引号内和外单引号)。
这应该适用于大多数 shell。
示例命令:
echo "My terminal is $term, first file found in /dev is </dev/`ls /dev | head -n 1`>, the
dollar symbol is '"`echo '$'`"', and a newspaper costs "`echo '$'`"2.50."
输出:
My terminal is xterm, first file found in /dev is </dev/acpi>, the dollar symbol
is '$', and a newspaper costs $2.50.
如果您确实需要$
在双引号字符串中使用字符,请尝试为该字符设置一个变量(最好在 ~/.tcshrc 文件中)。
例如,这是一个别名,它在给定命令的情况下以“filename.old24.ext”格式创建顺序编号的备份文件bak filename ext
:
set DOLLAR='$'
alias bak '/bin/ls -1v \!:1.old*.\!:2 | tail -n 1 | awk -F"." "{printf substr(${DOLLAR}2,4)+1}" | xargs -0 -ISEQ cp -ip \!:1.\!:2 \!:1.oldSEQ.\!:2'
注意,在${DOLLAR}
传递给 awk 的字符串中使用了 。$
当 shell 执行别名时,它将被实际字符替换。