BASH动态匿名子串可能吗?

时间:2017-06-24 13:30:22

标签: bash substring

有办法吗

CPU=$(uname -r); echo ${CPU##*-}

没有在BASH中声明字符串或函数?

echo ${$(uname -r)##*-}   #<<< I'm looking for this form

但它不起作用,

[[ $(uname -r) =~ .+-(.+) ]] && echo "${BASH_REMATCH[1]}"

不是动态的(我希望它嵌套),

un-r(){ uname -r;};cpu=$(un-r);echo ${cpu##*-}

不是匿名的,(或动态的)。

1 个答案:

答案 0 :(得分:2)

不,不是。 Zsh允许你用“明显”的意思写${$(uname -r)##*-}但没有其他普通的sh风格的shell。

您当然可以更改命令以获得所需的输出,例如

$(uname -r | sed 's/.*-//')

但您无法使用参数扩展构造对bash中的输出进行任何进一步处理。如果需要,请使用临时变量。如果您想避免污染函数中的shell变量,请使用local内置函数(或declaretypeset)将变量设置为local。如果您需要进行快速替换,请使用PROMPT_COMMAND准备提示的可变部分。