我正在检查一个 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
${parameter^pattern} ${parameter^^pattern} ${parameter,pattern} ${parameter,,pattern}
此扩展修改了 中字母字符的大小写
parameter
。pattern
扩展 生成一个模式,就像文件名扩展一样。 的扩展值中的每个字符都parameter
根据 进行测试pattern
,如果与模式匹配,则转换其大小写。模式不应尝试匹配多个字符。 运算符^
将匹配的小写字母转换pattern
为大写;,
运算符将匹配的大写字母转换为小写。^^
和,,
扩展转换扩展值中每个匹配的字符;^
和,
扩展匹配并仅转换扩展值中的第一个字符。如果pattern
省略,则将其视为?
与每个字符匹配的 。
因此${i,,}
扩展为的值i
,但所有大写字符都转换为小写。例如:
$ i=CaMeL
$ echo "$i"
CaMeL
$ echo "${i,,}"
camel
$