我有一个筛选器,我希望能够选择性地启用它,我想知道如何在bash中以一种简洁的方式实现这一点。
FILTER="| sort" # also can be empty
ls $FILTER | cat
这段代码不能正常工作,因为它会以 |
和 sort
作为参数来调用 ls
命令。
我该如何正确执行?请注意,我想避免创建 if
块以便保持代码易于维护(我的管道链比这个示例复杂得多)。
eval
。如果您完全控制要评估的字符串,那么这可能是安全的;如果用户可以向要评估的字符串提供输入,则会出现灾难。他们可能说cat
,但实际上传递的却是cat; mv $HOME/.profile $HOME/.junk
或者更糟糕(而且可能是不可逆转的,或者至少是难以逆转的)。因此,使用eval
是危险的。然而,它确实存在,并且可以很有用。 - Jonathan Leffler