单个变量的参数扩展按预期工作。但是如何扩展包含多个变量的参数呢?例子:
#!/bin/sh
foo=/lorem/ipsum; bar=dolor/sit
tmp="$foo/$bar"
printf '%s\n' "${tmp%/*}"
如何在不需要临时变量的情况下运行此参数扩展?
答案1
扩展仅允许一个变量,因此需要临时变量。但是,如果这是确切的用例,则 dirname 可能适合您,因为它的作用与 %/* 几乎完全相同:
$ foo=/lorem/ipsum; bar=dolor/sit
$ dirname $foo/$bar
/lorem/ipsum/dolor
答案2
这是一个...解决方法...不会在中设置临时变量当前的壳:
foo=/lorem/ipsum; bar=dolor/sit
(tmp="$foo/$bar"; printf '%s\n' "${tmp%/*}")