我尝试在一行代码中执行以下操作:
if [ -z "$foo" ]
then
source "$foo/subdir/yo.sh"
else
source "$bar/yo.sh"
fi(请注意,只有在使用foo时才会出现子目录)。到目前为止最简单的解决方案是:
source "${foo:-$bar}${foo:+/subdir}/yo.sh"换句话说,取foo或bar,如果foo存在,则附加/subdir。有没有更优雅的方式来做这件事?
发布于 2010-11-11 02:26:03
试试这个:
$((printf $foo 2>/dev/null && printf '/subdir') || printf $bar)/yo.sh不过有点纠结。
这个解决方案的关键方面是找到一种方法,既可以输出$foo的内容(如果有的话),又可以根据$foo中是否有内容进行分支。不带参数的printf是一个错误,不带内容的$foo会导致printf不带参数。在那之后,剩下的事情就很容易了。
由于这个原因,第一个printf需要是printf,但是如果您愿意的话,可以用echo -n替换其他的。
发布于 2010-11-10 23:27:39
if [[ -d $foo ]]; then
dir="$foo/subdir"
else
dir="$bar"
fi
source "$dir/yo.sh"发布于 2010-11-10 21:41:21
试一试
amithere=$foo
if [ ! -z "$amithere" ]
then
amithere=$bar
fi
source "$amithere/yo.sh"https://stackoverflow.com/questions/4143503
复制相似问题