灵感来自这个问题:
当条件是命令替换时,如果命令不产生输出,if语句应该做什么?
注意:示例是if $(true); then ...
,而不是if true ; then ...
例如,给定:
if $(true) ; then echo yes ; else echo no ; fi
Run Code Online (Sandbox Code Playgroud)
我认为$(true)
应该用true
命令的输出代替,这没什么.它应该等同于:
if "" ; then echo yes ; else echo no ; fi
Run Code Online (Sandbox Code Playgroud)
打印,no
因为没有名称为空字符串的命令,或者这样:
if ; then echo yes ; else echo no ; fi
Run Code Online (Sandbox Code Playgroud)
这是一个语法错误.
但实验表明,如果命令不产生输出,则该if
语句将其视为true或false,具体取决于命令的状态,而不是其输出.
这是一个演示行为的脚本:
#!/bin/bash
echo -n 'true: ' ; if true ; then echo yes ; else echo …
Run Code Online (Sandbox Code Playgroud) 我想使用awk找到一个特定的进程:
ps aux|awk '/plugin-container.*Flash.*/'
Run Code Online (Sandbox Code Playgroud)
现在它找到了进程,但它将自己包含在结果中,因为ps结果也包含它们.为了防止这种情况,我试图使用负面看法如下:
ps aux|awk '/(\?<!awk).*plugin-container.*Flash.*/'
Run Code Online (Sandbox Code Playgroud)
但它不起作用.awk支持看后面吗?我究竟做错了什么?谢谢