繁体   English   中英

命令 grep “$SHELL$” foo

[英]the command grep “$SHELL$” foo

我无法理解这个命令的作用,更重要的是命令中 $s 的重要性。 我首先创建了一个文件 foo 并用 SHELL、WELL 等字词填充它。然后我尝试了该命令,但它没有打印任何内容,所以我认为我的终端可能有问题。 请参阅下面的终端:

ifsmy12@cloudshell:~/3300/tests/t2 (cs3300-301722)$ cat foo
SHELL
HELL
WELL
SHELL
SWELL
DWELL
FAREWELL
ifsmy12@cloudshell:~/3300/tests/t2 (cs3300-301722)$ grep "$SHELL$" foo
ifsmy12@cloudshell:~/3300/tests/t2 (cs3300-301722)$

然后我决定先尝试不使用第一个 $ 的命令,然后执行相同的操作,但不使用第二个 $。 我的结果如下:

ifsmy12@cloudshell:~/3300/tests/t2 (cs3300-301722)$ grep "$SHELL" foo
ifsmy12@cloudshell:~/3300/tests/t2 (cs3300-301722)$ grep "SHELL$" foo
SHELL
SHELL

我得到了一些结果,但我仍然对每个 $ 的作用以及为什么该命令不能同时使用两者感到困惑。 有人可以解释吗?

$SHELL扩展为您当前执行的 shell 的路径。 $没有文本后它不会扩展并保持不变。

如果在 Bash shell 中执行,您的最终命令将如下所示:

grep '/bin/bash$' foo

$作为的一部分——这就是grep 模式的含义——表示“行尾”。

您可以通过在命令前添加echo或在 shell 中启用命令跟踪来验证它: set -x

综上所述,使用未转义的$并期望它不会扩展是不好的做法(换句话说:等待令人惊讶的事情发生)。 最好明确说明您希望执行 shell 扩展的位置以及不执行的位置:

grep "$SHELL"'$' foo
grep "$SHELL\$" foo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM