5

我正在尝试运行以下命令:

replace -x "must " A2input.txt
replace -x " a" -f -s ## A2input.txt
replace -x to -s ## -a A2input.txt
replace -x faith -f "unequivocal" A2input.txt

如果我可以将它的别名为“a”、“b”、“c”、“d”等简短而简单的名称,那就太好了……

但是,其中一些参数有一个引号,这弄乱了别名。有谁知道如何真正逃避双引号?我已经尝试过'\"'和\"之类的东西,但似乎没有任何效果。

我正在使用 tcsh 作为我的外壳。

4

5 回答 5

7

以下所有工作都tcsh可以实现各种结果:

alias t echo hello world # 你可能实际上不需要任何引号
alias u 'echo "hello world"' # 不同类型的嵌套引号
alias v echo\ \"hello\ world\" # 转义一切
alias w echo '\;'hello'";"' world # 仅引用/转义问题区域
alias x 'echo \"hello world\"' # 单引号和文字转义 "
alias y "echo "\""hello world"\" # 取消引用,转义引用,引用 ("\"")
alias z 'echo '\''hello world'\' # 同样适用于单引号 ('\'')

要查看 shell 如何解释这些,请alias不带参数运行:

% 别名
t(回声你好世界)
你回声“你好世界”
v 回声“你好世界”
w (回声\;你好";"世界)
x echo \"你好世界\"
y 回声“你好世界”
z echo '你好世界'

括号中的任何内容都在子shell中运行。如果您尝试设置环境变量,这会很糟糕,但其他情况大多无关紧要。

最后,这是示例的实际作用:

%t; 你; 五; w; X; 是;z
你好世界
你好世界
你好世界
;你好; 世界
“你好世界”
你好世界
你好世界
于 2014-03-04T04:12:59.100 回答
6

我通过将带有双引号的字符串存储在一个变量中来使其工作,其中字符串由单引号引起来。当我使用单引号内的变量时。
例子:

[11:~] phi%
[11:~] phi% set text = 'a quote "'
[11:~] phi% 别名 ec echo '$text'
[11:~] phi%ec
报价“
[11:~] phi%
[11:~] phi% alias ec echo this has '$text'
[11:~] phi%ec
这有一个报价“
[11:~] phi%

我在 OSX 上用 tcsh 测试了这个

于 2008-12-20T02:00:11.937 回答
3

tcsh有一个较新的变量backslash_quote。不确定何时添加,但在6.18.01(OS X El Capitan 上的版本)和6.19(撰写本文时的最新稳定版本)中受支持。这使得可以在引号内转义'"和。`

set backslash_quote

set sentence = 'I\'m a little teapot.'
set sentence2 = "The man said \"hello\""

如果您不想使用此选项,您的选择仅限于在符号周围使用不同类型的引号

"The man said "'"'"hello"'"'

或者根本不使用引号并随意反斜杠。

The\ man\ said\ \"hello\"
于 2016-05-18T17:34:34.160 回答
1

It would appear that the reason that \" and \' don't work as you expect is that csh traditionally didn't support such syntax, so, if tcsh were to unconditionally support it, then such older scripts may not work properly anymore.

As mentioned in another answer, tcsh itself has the set backslash_quote feature; however, unlike implied in the mentioned answer, this is hardly a new feature, it's just a tcsh-specific one, and was actually added to tcsh at least some 27 years ago — the feature was first documented in the manual page at tcsh.man,v 3.8 1991/07/25 04:50:55, which hardly qualifies it as "new".

http://mdoc.su/n,f,d/tcsh.1

backslash_quote (+)
       If set, backslashes (`\') always quote `\', `'', and `"'.  This
       may  make complex quoting tasks easier, but it can cause syntax
       errors in csh(1) scripts.
于 2018-02-24T23:29:29.050 回答
0

如果您无法使用别名,只需编写一个简短的 shell 脚本 chmod +x,并将其放在 $PATH 中的某个位置(如 $HOME/bin):

#!/bin/tcsh
replace -x "must" ...

我对 tcsh 没有任何经验,但是使用 bash 你可以像以下任何一种方式一样:

alias t='echo "hello  world"'     # using single quotes to enclose entire string
alias t=echo\ \"hello\ \ world\"  # escape " and <space>
alias t="echo \"hello  world\""   # double-quote + escape inner double quotes

也许类似的东西会在 tcsh 中起作用?

于 2008-12-20T01:53:15.287 回答