首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash "coalesce“功能

Bash "coalesce“功能
EN

Stack Overflow用户
提问于 2010-11-10 18:34:23
回答 3查看 3.8K关注 0票数 3

我尝试在一行代码中执行以下操作:

代码语言:javascript
运行
复制
if [ -z "$foo" ]
then
    source "$foo/subdir/yo.sh"
else
    source "$bar/yo.sh"
fi

(请注意,只有在使用foo时才会出现子目录)。到目前为止最简单的解决方案是:

代码语言:javascript
运行
复制
source "${foo:-$bar}${foo:+/subdir}/yo.sh"

换句话说,取foo或bar,如果foo存在,则附加/subdir。有没有更优雅的方式来做这件事?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-11 02:26:03

试试这个:

代码语言:javascript
运行
复制
$((printf $foo 2>/dev/null && printf '/subdir') || printf $bar)/yo.sh

不过有点纠结。

这个解决方案的关键方面是找到一种方法,既可以输出$foo的内容(如果有的话),又可以根据$foo中是否有内容进行分支。不带参数的printf是一个错误,不带内容的$foo会导致printf不带参数。在那之后,剩下的事情就很容易了。

由于这个原因,第一个printf需要是printf,但是如果您愿意的话,可以用echo -n替换其他的。

票数 2
EN

Stack Overflow用户

发布于 2010-11-10 23:27:39

代码语言:javascript
运行
复制
if [[ -d $foo ]]; then
    dir="$foo/subdir"
else
    dir="$bar"
fi
source "$dir/yo.sh"
票数 0
EN

Stack Overflow用户

发布于 2010-11-10 21:41:21

试一试

代码语言:javascript
运行
复制
amithere=$foo   
if [ ! -z "$amithere" ]   
then    
    amithere=$bar    
fi    
source "$amithere/yo.sh"
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4143503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档