bash - Bash 变量参数扩展完整文档
问题描述
有一些鲜为人知的 bash 变量扩展:
+----------------------------------------------------------+----------------+
| description | expression |
+----------------------------------------------------------+----------------+
| Remove everything **after** the **last** '7' | ${var%7*} |
| Remove everything **after** the **first** '7' | ${var%%7*} |
| Remove everything **before** the **first** '7' | ${var#*7} |
| Remove everything **before** the **last** '7' | ${var##*7} |
| First char upper case | ${var^} |
| All upper case | ${var^^} |
| First char lower case | ${var,} |
| All lower case | ${var,,} |
| Show how variable was set | ${var@A} |
| ?? something cool ?? | ${var@E} |
| Print variable as though it were the prompt variable PS1 | ${var@P} |
| ?? something cool ?? | ${var@Q} |
+----------------------------------------------------------+----------------+
我一直在努力寻找记录所有这些技巧的来源。到目前为止,我发现的最好的是这张备忘单。但即使是该页面也缺少其中一些扩展规则。为了编写良好的 bash 代码并使该代码可移植,我正在寻找几件事:
- 所有 bash 变量扩展技巧是什么?
- 哪里有显示所有这些的文档(理想情况下带有示例)?
- 哪些版本的 bash 可以使用哪些技巧?
解决方案
关于参数扩展的一些好的指示:
- https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
- http://mywiki.wooledge.org/BashFAQ/073
- https://wiki.bash-hackers.org/syntax/pe
你错过了很多,比如
- 单个替换 a -> b :
${x/a/b}
- 多个替换 a -> b :
${x//a/b}
- 偏移操作:
${x:1:3}
${var-word}
如果定义了 var,则使用 var;否则,“单词”${var+word}
如果定义了 var,则使用“word”;否则,什么都没有${var=word}
如果定义了 var,则使用 var;否则,使用“word”并将“word”分配给 var${var?error}
如果定义了 var,则使用 var;否则打印“错误”并退出- 数组切片
${files[@]: -4}
请注意,大多数 PE 也适用于数组
推荐阅读
- java - 如何从运行在 tomcat 上的 java web 应用程序在浏览器中打开新页面?
- java - 是否可以比较两个空的 Runnable 是否相等?
- reactjs - 如何在反应中使用条纹内联形式
- python - 如何使一个框出现在其他窗口的顶部
- python - 遗传算法群体个体作为阵列
- node.js - npm install 报告未引用的 Angular 组件版本
- python - python - 如何在没有熊猫的情况下将一个值拆分为python中的两条记录?
- java - 简单的应用程序崩溃了我只是想改变一些视图的可见性
- python - 如何将任务并行分配给多个 celery worker?
- plugins - 用于聊天前缀的插件 BungeeCord