我看到在 Bash > 4.0 中变量扩展用于小写变量。例如
echo ${variable,,}
正在阅读手册页我真的不明白为什么 shell 将字符串转换为小写。
序列表达式采用 {x..y[..incr]} 形式,其中 x 和 y 是整数或单个字符,而 incr(可选增量)是整数。当提供整数时,表达式将扩展为 x 和 y 之间的每个数字(包括 x 和 y)。提供的整数可以带有“0”前缀,以强制每个项具有相同的宽度。当 x 或 y 以零开头时,shell 会尝试强制所有生成的项包含相同数量的数字,并在必要时进行零填充。当提供字符时,表达式将使用默认的 C 语言环境按字典顺序扩展为 x 和 y 之间(含)之间的每个字符。请注意,x 和 y 必须属于同一类型。当提供增量时,它被用作每项之间的差。默认增量为 1 或 -1(视情况而定)。
为什么变量要转换为小写?
答案1
您正在阅读文档的错误部分;看着shell参数扩展反而。
${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}
此扩展修改了 中字母字符的大小写
parameter
。被pattern
扩展以产生一个模式,就像文件名扩展一样。的扩展值中的每个字符parameter
都会针对 进行测试pattern
,如果它与模式匹配,则转换其大小写。该模式不应尝试匹配多个字符。 '^' 运算符将匹配模式的小写字母转换为大写; ',' 运算符将匹配的大写字母转换为小写字母。 '^^' 和 ',,' 扩展转换扩展值中的每个匹配字符; '^' 和 ',' 扩展仅匹配并转换扩展值中的第一个字符。如果pattern
省略,则将其视为“?”,匹配每个字符。如果parameter
是'@'或'*',则依次对每个位置参数应用大小写修改操作,并且扩展为结果列表。如果parameter
是下标为“@”或“*”的数组变量,则依次对数组的每个成员应用大小写修改操作,并且扩展为结果列表。
答案2
您正在引用“大括号扩展”部分,“大括号扩展”不以 开头$
。
你应该执行这个命令:
LESS=+/'\{parameter\^pattern\}' man bash
$
查找以( )开头的“大小写修饰”部分${ ^^ }
。