嵌套参数替换在 Zsh 中有效:

$ param=abc

# nested remove prefix ${...#a} and remove suffix ${...%c} =>
$ printf '%s\n' ${${param#a}%c}
# => b

POSIX 中是否有任何等价物?
$ param=abc
$ printf '%s\n' ${${param#a}%c}
# => dash: 2: Bad substitution
# => sh: ${${param#a}%c}: bad substitution
# => bash: ${${param#a}%c}: bad substitution

最佳答案

您可以改用 expr 来提取所需前缀和后缀之间的文本。 (当然,这不是等同于嵌套表达式的通用目的,但确实可以解决您的给定问题。)

param=abc
expr "$param" : "a\(.*\)c"
: 的正则表达式匹配运算符 expr 有两个参数:左边的参数是一个字符串,右边的参数是一个正则表达式。输出是 \(...\) 组内匹配的任何内容。

关于posix - POSIX shell 中的嵌套参数替换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29564726/

10-13 07:21