有办法吗
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##*-}
不是匿名的,(或动态的)。
答案 0 :(得分:2)
不,不是。 Zsh允许你用“明显”的意思写${$(uname -r)##*-}
但没有其他普通的sh风格的shell。
您当然可以更改命令以获得所需的输出,例如
$(uname -r | sed 's/.*-//')
但您无法使用参数扩展构造对bash中的输出进行任何进一步处理。如果需要,请使用临时变量。如果您想避免污染函数中的shell变量,请使用local
内置函数(或declare
或typeset
)将变量设置为local。如果您需要进行快速替换,请使用PROMPT_COMMAND
准备提示的可变部分。