bash - BASH 动态匿名子字符串可能吗?

标签 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##*-}

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

最佳答案

不,不是。 Zsh 允许您以“明显”的含义编写 ${$(uname -r)##*-} ,但其他常见的 sh 风格 shell 都不会这样做。

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

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

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

关于bash - BASH 动态匿名子字符串可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44736925/

相关文章:

bash - 如何取消终端中的长输出?

git - 我如何让 git 使用 Textmate 作为我的默认编辑器?

javascript - 缩短字符串而不切割 JavaScript 中的单词

php - 如何查找数组项以特定字母开头的所有场合

linux - 在 shell 脚本中读取矩阵中的值

mysql - 如何将数据从可变文本文件插入到表中?

linux - bash 中的字符串连接导致替换

algorithm - 计算幺半群/半群的所有中缀积

c# - Xamarin C# 安卓 : change color text in a substring?

java - 尝试从长字符串中获取字符串时出现 StringIndexOutOfBoundsException