我有一个使用以下逻辑的脚本:
if [ ! -z "$1" ]; then # if any parameter is supplied
ACTION= # clear $ACTION
else
ACTION=echo # otherwise, set it to 'echo'
fi
这工作正常,原样。但是,在阅读手册的Shell Parameter Expansion部分时bash
,似乎这应该可以一步完成。但是,我不能完全理解如何做到这一点。
我试过了:
ACTION=${1:-echo} # ends up with $1 in $ACTION
ACTION=${1:+}
ACTION=${ACTION:-echo} # ends up always 'echo'
以及一些嵌套它们的方法,但据我所知,嵌套似乎是不允许的。
我意识到我已经有了一个可行的解决方案,但现在我真的很好奇这是否可能。对于三元运算符来说,这很简单,但我认为 bash 没有。
如果这是可能的,我希望看到执行这个看似两步过程的逻辑,没有 if/else 构造,但仅使用Shell Parameter Expansion features的任何组合。
谢谢你。
编辑Elderarthis:
脚本的其余部分只是:
find . -name "*\?[NMSD]=[AD]" -exec ${ACTION} rm -f "{}" +
我只是想ACTION=echo
对自己进行一次健全性检查,因此,传递任何参数实际上都会删除(通过使 ${ACTION} 无效,而不传递任何参数会在其中留下 echo。
我知道 TIMTOWDI;我正在寻找是否可以仅使用 Shell Parameter Expansion 部分中的内容来完成 :-)
编辑米克尔:
$ cat honk.sh
#!/bin/bash
ACTION=${1-echo}
echo $ACTION
$ ./honk.sh
echo
$ ./honk.sh foo
foo
最后一个需要有ACTION=''
,因此返回一个空行/空值。