首页 > 解决方案 > 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 代码并使该代码可移植,我正在寻找几件事:

  1. 所有 bash 变量扩展技巧是什么?
  2. 哪里有显示所有这些的文档(理想情况下带有示例)?
  3. 哪些版本的 bash 可以使用哪些技巧?

标签: bash

解决方案


关于参数扩展的一些好的指示:

你错过了很多,比如

  • 单个替换 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 也适用于数组


推荐阅读