默认值AND删除匹配的后缀

时间:2014-02-12 13:48:15

标签: bash

有没有办法同时执行default values ${foo:-bar}remove matching suffix ${foo%bar} bash功能?

类似的东西:${foo%suffix:-default}

换句话说,我想:

  • 如果未设置foo或使用default
  • ,则为null
  • 如果设置了foo,请删除最后的suffix

2 个答案:

答案 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