破折号是 Bash 中的一个特殊字符,如 http://tldp.org/LDP/abs/html/special-chars.html#DASHREF 所示。所以转义一次只会让你通过 Bash,但 Grep 仍然对破折号有自己的意义(通过提供选项)。
所以你真的需要两次逃避它(如果你不想使用其他提到的答案)。以下将/应该工作
grep \\-X
grep '\-X'
grep "\-X"
尝试 Bash 如何将参数传递给脚本/程序的一种方法是创建一个仅回显所有参数的 .sh 脚本。我不时使用一个名为 echo-args.sh 的脚本来玩,它包含的只是:
echo $*
我将其调用为:
bash echo-args.sh \-X
bash echo-args.sh \\-X
bash echo-args.sh "\-X"
你明白了。
grep -e -X
可以解决问题。
-P
(但这是另一回事,此处不适用))。
grep -- -X
grep \\-X
grep '\-X'
grep "\-X"
grep -e -X
grep [-]X
我无权访问 Solaris 机器,但 grep "\-X"
在 linux 上为我工作。
如前所述,正确的方法是使用“--”来停止处理参数。这是由于在工具的源代码中使用了 getopt_long(来自 getopt.h 的 GNU C 函数)。
这就是您在其他命令行工具上注意到相同现象的原因;由于它们中的大多数都是 GNU 工具,并且使用这个调用,它们表现出相同的行为。
作为旁注 - getopt_long 让我们在 -rlo 和 --really_long_option 以及解释器中的参数组合之间做出了很酷的选择。
如果您正在使用另一个将单个参数传递给 grep 的实用程序,您可以使用:
'[-]X'
你可以使用 nawk
$ nawk '/-X/{print}' file
ls -l | grep "^-"
希望这个能达到你的目的。
grep "^-X" 文件
它将 grep 并选择文件中的所有行。 grep 中的 ^"^" 表示以
-
而不是行开头的 strings。
--
含义或作用的人:unix.stackexchange.com/questions/11376/…ARGS="-a -b -c"
grep -- "$ARGS"
grep -- "--name awesome"
。