有没有办法同时执行default values ${foo:-bar}
和remove matching suffix ${foo%bar}
bash功能?
类似的东西:${foo%suffix:-default}
换句话说,我想:
foo
或使用default
值foo
,请删除最后的suffix
答案 0 :(得分:3)
类似的东西:
${foo%suffix:-default}
不可能以类似于您所描述的方式实现您想要的目标。
但是,您可以使用控制运算符来实现所需的结果,而无需使用临时变量:
$ FOO=foobar
$ [ -z "$FOO" ] && FOO=default || FOO=${FOO%bar}
$ echo $FOO
foo
$ FOO=
$ [ -z "$FOO" ] && FOO=default || FOO=${FOO%bar}
$ echo $FOO
default
答案 1 :(得分:2)
您可以使用默认分配而不是默认替换。这也是:
“no-op”命令的用法:
: ${foo:=default}
echo ${foo%suffix}
测试:
$ default=foobar suffix=bar
$ foo=hello ; : ${foo:=$default}; echo $foo ${foo%$suffix}
hello hello
$ foo=ironbar; : ${foo:=$default}; echo $foo ${foo%$suffix}
ironbar iron
$ unset foo ; : ${foo:=$default}; echo $foo ${foo%$suffix}
foobar foo