2

我怎样才能$在 csh 中逃脱?在 <双引号> ( "") 内。我正在尝试这样做,但无法逃脱 <dollar> 符号 ( $)

alias e "echo \\!:2-$"

这有效,但不足以满足我的需求

alias e echo \\!:2-$
4

3 回答 3

4

尝试使用单引号代替 - alias e 'echo \!:2-$'。您还需要反斜杠转义历史替换。

于 2012-10-01T13:36:56.317 回答
4

对这个老问题提出的答案是不正确的。

可以在 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.
于 2018-01-09T13:22:42.150 回答
1

如果您确实需要$在双引号字符串中使用字符,请尝试为该字符设置一个变量(最好在 ~/.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 执行别名时,它将被实际字符替换。

于 2019-01-19T18:58:27.973 回答