多个变量的参数扩展

多个变量的参数扩展

单个变量的参数扩展按预期工作。但是如何扩展包含多个变量的参数呢?例子:

#!/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%/*}")

相关内容