嵌套参数替换在 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/