我正在使用bash脚本,如果存在特定文件,则需要有条件地执行一些操作。这是多次发生,所以我抽象了以下函数:
function conditional-do { if [ -f $1 ] then echo "Doing stuff" $2 else echo "File doesn't exist!" end }
现在,当我要执行此操作时,我将执行以下操作:
function exec-stuff { echo "do some command" echo "do another command" } conditional-do /path/to/file exec-stuff
问题是,我烦恼的是我要定义两件事:一组要执行的命令的功能,然后调用我的第一个功能。
我想以一种干净的方式直接将此命令块(通常是2个或更多)传递给“条件执行”,但是我不知道这是如何可行的(或者甚至是可能的)...有人吗?有任何想法吗?
请注意,我需要将其作为可读的解决方案...否则,我宁愿坚持使用现有的东西。
对于大多数C程序员来说,这应该是可读的:
function file_exists { if ( [ -e $1 ] ) then echo "Doing stuff" else echo "File $1 doesn't exist" false fi } file_exists filename && ( echo "Do your stuff..." )
或单线
file_exists filename && echo "Do your stuff..."
现在,如果您确实希望从该函数运行代码,则可以这样做:
function file_exists { if ( [ -e $1 ] ) then echo "Doing stuff" shift $* else echo "File $1 doesn't exist" false fi } file_exists filename echo "Do your stuff..."
但我不喜欢这种解决方案,因为您最终将最终转义命令字符串。
编辑:更改“评估$ *”为$ *。实际上,不需要评估。与bash脚本一样,它是在我喝了几杯啤酒时才写的;-)