【发布时间】:2017-08-15 09:30:34
【问题描述】:
我有一个过滤器,我想选择启用它,我想知道如何在 bash 中以一种干净的方式做到这一点。
FILTER="| sort" # also can be empty
ls $FILTER | cat
此代码不起作用,因为它将以| 和sort 作为参数调用ls。
我怎样才能正确地做到这一点?请注意,我试图避免创建 if 块,以使代码易于维护(我的管道链比此示例复杂得多)
【问题讨论】:
-
这些过滤器会接收任何类型的参数吗?
-
一种危险的生活方式是使用
eval。如果您完全控制所评估的字符串,那将是安全的;如果用户可以为被评估的字符串提供输入,那将是一场等待发生的灾难。在您期望他们说cat的地方,也许他们说cat; mv $HOME/.profile $HOME/.junk或更可怕的东西(并且可能是不可逆转的,或者至少是不可逆转的)。因此,使用eval是危险的。尽管如此,它还是存在的,而且很有用。