我想找到一种简单的单行方式,根据特定条件以管道方式传输字符串
上面的代码是我尝试根据名为textfolding的变量创建管道条件。
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
这显然行不通。
如何在同一行中实现这一点?
gr8qqesn1#
您不能使管道本身具有条件,但可以包含if块作为管道的元素:
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,它将被丢弃在隐喻的地板上。
else cat
cat
os8fio9y2#
条件执行如何?
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
2条答案
按热度按时间gr8qqesn1#
您不能使管道本身具有条件,但可以包含
if
块作为管道的元素:下面是一个更容易阅读的版本:
请注意,由于
if
块是管道的一部分,因此需要包含类似else cat
子句的内容(正如我在上面所做的),以便无论if
条件是否为真,something 都将传递管道数据。如果没有cat
,它将被丢弃在隐喻的地板上。os8fio9y2#
条件执行如何?