Shell - *${i,,}* 是否正确并且其用途是什么?

Shell - *${i,,}* 是否正确并且其用途是什么?

我正在检查一个 shell 脚本并发现以下几行:

DIR=/home/bot/REP_INV/
LIST=/root/ListeTRI.txt
...
ligne=`cat $LIST`
for i in $ligne
do
    /bin/cp  $DIR*$i* /root/$i/InvExt/
    /bin/cp  $DIR*${i,,}* /root/$i/InvExt/
done

在 DIR 文件夹中,我有大量文件,在 LIST 文件中,我有对这些文件进行排序的代码。目标是将文件排序到其他文件夹中。

我理解第一个复制命令应该根据文件的名称将文件从 DIR 复制到 /root/ 中的正确文件夹(它的名称中应该包含来自 LIST 的代码)

但我不知道第二个复制命令的用途。有人知道这个语法吗${i,,}/bin/cp $DIR*${i,,}* /root/$i/InvExt/

答案1

Bash 参考手册

${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}

此扩展修改了 中字母字符的大小写parameterpattern扩展 生成一个模式,就像文件名扩展一样。 的扩展值中的每个字符都parameter根据 进行测试pattern,如果与模式匹配,则转换其大小写。模式不应尝试匹配多个字符。 运算符^将匹配的小写字母转换pattern为大写;,运算符将匹配的大写字母转换为小写。^^,,扩展转换扩展值中每个匹配的字符;^,扩展匹配并仅转换扩展值中的第一个字符。如果pattern省略,则将其视为?与每个字符匹配的 。

因此${i,,}扩展为的值i,但所有大写字符都转换为小写。例如:

$ i=CaMeL
$ echo "$i"
CaMeL
$ echo "${i,,}"
camel
$

相关内容