use*_*050 3 shell grep shell-script posix
嗨,我有一个适用于 dmenu 的 NetworkManager 的小包装脚本,我希望它尽可能简单,并希望完全 posix。
我正在使用 shellcheck,它给了我一个关于这一行的“警告”:
...
if [ -z "$(echo "$VAR" | grep "pattern")" ] && [ -z "$(grep -w $OtherVar ~/somefile)" ]
...
Run Code Online (Sandbox Code Playgroud)
它 (shellcheck) 说我应该使用grep -q而不是,[ -z ]但是在阅读(和重新阅读)bash 和 grep 的手册页之后,它似乎grep -q实际上并不是我想要使用的,或者是吗?与grep -q实际相比如何[ -z/-n]?
ilk*_*chu 10
设置条件[ -z "$(echo "$VAR" | grep "pattern")" ]检查输出grep是否为空。使用grep -q检查 grep 是否匹配任何内容。
如果你想知道是否$var包含正则表达式$pattern,你可以使用
if echo "$var" | grep -qe "$pattern"; then
echo match
fi
Run Code Online (Sandbox Code Playgroud)
或if ! echo ...相反的情况。
这与查看 的输出完全不同grep,因为理论上您可能有一个匹配零字符字符串的模式......(但它可能会匹配任何输入。)
请注意,那里没有[.. ],我们echo | grep直接使用该管道作为条件。检查command的退出状态,可以是, 或其他命令。if command[