簡體   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