BASH动态匿名子字符串是否可能?

BASH动态匿名子字符串是否可能?,bash,substring,Bash,Substring,有办法吗 CPU=$(uname -r); echo ${CPU##*-} 没有在BASH中声明字符串或函数 echo ${$(uname -r)##*-} #<<< I'm looking for this form 不是动态的(我希望它嵌套),并且 不是匿名的(或动态的)。不,不是。Zsh允许您使用“显而易见”的含义编写${$(uname-r)###*-},但其他常见的sh样式shell都不这样做 当然,您可以更改命令以获得所需的输出,例如 $(uname -r |

有办法吗

CPU=$(uname -r); echo ${CPU##*-}
没有在BASH中声明字符串或函数

echo ${$(uname -r)##*-}   #<<< I'm looking for this form
不是动态的(我希望它嵌套),并且


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

不,不是。Zsh允许您使用“显而易见”的含义编写
${$(uname-r)###*-}
,但其他常见的sh样式shell都不这样做

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

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

但您不能使用参数扩展构造在bash内部对输出进行任何进一步的处理。如果需要,请使用临时变量。如果要避免污染函数中的shell变量,请使用内置的
local
(或
declare
typeset
)将变量设置为local。如果需要它进行提示替换,请使用
prompt\u命令
准备提示的可变部分。

这有点像XY问题;您希望从
uname-r
中获得哪些CPU信息?(也就是说,不,你不能仅仅通过参数展开来实现。)这不是XY问题。来自$(uname-r)的cpu就是一个例子。
un-r(){ uname -r;};cpu=$(un-r);echo ${cpu##*-}
$(uname -r | sed 's/.*-//')