POSIX shell中的嵌套参数替换

时间:2015-04-10 15:01:13

标签: posix sh

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

2 个答案:

答案 0 :(得分:1)

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

param=abc
expr "$param" : "a\(.*\)c"

:的正则表达式匹配运算符expr有两个参数:左参数是字符串,右参数是正则表达式。输出是\(...\)组内匹配的任何内容。

答案 1 :(得分:0)

Bash没有,但你有许多其他工具可以完成工作。

cut -b2 <<< abc
tr -d ac <<< abc
sed s/[ac]// <<< abc
awk '$0=$2' FS= <<< abc

应该注意,参数替换不会缩放

Parameter expansion slow for large data sets