我正在运行以下命令:
cat something | egrep "(abc|def)$"
在运行 Linux 的服务器上。
使用内核为 2.6.18 的同一操作系统给出了正确答案,而使用内核为 2.6.19 的操作系统则得到了:
Illegal variable name.
显然,$ 符号导致了错误,但问题是为什么它在不同的内核中表现不同?
答案1
1)您在两台机器上使用相同类型的 shell 吗?
2)您是否尝试过使用单引号,以便 shell 不会尝试将美元符号解释为变量?
答案2
这更可能是您正在运行的 shell 的问题。首先,引号;使用单引号时,变量不会在输出字符串中被替换。即,
% VAR="hello"
% echo "$VAR world!"
hello world!
% eco '$VAR world!'
$VAR world!
就您而言,它实际上是试图执行$
,但$
不是有效的变量名。如果您使用单引号,shell 将不允许替换美元符号。