更新2:这个问题与这个问题有关,可能是因为这可能/可能不起作用的根本原因是相同的。但我不确定它是否实际上是重复的,因为嵌套只是如何在其中获取字符串的一个示例。同样的基本问题也可以改写为:
- 有没有办法在参数扩展中直接使用字符串,可能使用
expr
- 将输出传递到参数扩展的最简洁方法是什么?
更多“假”语法示例来说明这些目标......
${$(echo "b"; b="ABCDE")::3} # Assign output inside?
... | grep -o "ABCDE" | ${-::2} # pipe to placeholder inside?
因此,根据您的目标,这可能是一个骗局,也可能不是。无论如何,从目前的答案来看,这种方法听起来无论如何都是不可能的......
这是一个关于 bash 操作的一般问题,而不是尝试获取特定的字符串 subser ...
我知道您可以使用参数扩展和其他技巧来提取或替换已定义变量的某些部分。
例如:
$ MYVAR=$(date) # just to generate text; could be "ABCDE"
$ echo $MYVAR
Mon Oct 20 15:55:07 PDT 2014
$ echo ${MYVAR:11}
15:55:07 PDT 2014
$ echo ${MYVAR%:*}
Mon Oct 20 15:55
我想要的是一种在不创建中间变量的情况下“嵌套”这些操作的方法。
例如,当你这样做时你会得到什么:
$ TIME=${MYVAR:11}
$ echo ${TIME%:*}
15:55
我希望能够将正在发生的操作嵌套在正在发生TIME
的操作中MYVAR
。
想到的潜在语法类似于$()
让您嵌套操作,但对变量执行此操作。它可能看起来像这样......(这是行不通的——我试过了!)
echo ${`${MYVAR:11}`%:*} # ERROR
这样做的好处是您可以完全不用分配MYVAR
and ,而是TIME
使用字符串 or $(date)
(或 a 的输出grep
等)代替它。