bash中的OneLiner条件管道



问题

我想找到一种简单的、单行的方式来根据特定的条件管道字符串

尝试

上面的代码是我试图根据一个名为textfolding的变量来创建一个管道条件。

textfolding="ON"
echo "some text blah balh test foo" if [[ "$textfolding" == "ON" ]]; then | fold -s -w "$fold_width"  | sed -e "s|^|t|g"; fi

这显然没有奏效。

最终

我怎么能在同一条线上实现这一点?

不能使管道本身成为条件,但可以将if块作为管道的元素:

echo "some text blah balh test foo" | if [[ "$textfolding" == "ON" ]]; then fold -s -w "$fold_width" | sed -e "s|^|t|g"; else cat; fi

这里有一个可读性更强的版本:

echo "some text blah balh test foo" |
if [[ "$textfolding" == "ON" ]]; then
fold -s -w "$fold_width" | sed -e "s|^|t|g"
else
cat
fi

请注意,由于if块是管道的一部分,因此需要包含类似else cat子句的内容(如上所述),以便无论if条件是否为真,something都将通过管道数据。如果没有cat,它只会被扔在隐喻的地板上。

条件执行怎么样?

textfolding="ON"
string="some text blah balh test foo"
[[ $textfolding == "ON" ]] && echo $string | fold -s -w $fold_width | sed -e "s|^|t|g" || echo $string

相关内容

  • 没有找到相关文章

最新更新