问题:
今天在批量格式化文件夹名称时遇到一个问题:我要用for循环批量重命名一些文件夹,原文件夹名格式为前缀+数字+后缀(即“prefix_num_suffix”),我要改成新的前缀+数字(prefixnew+num),我就用中间的数字作为for循环的变量,代码如下(比如有10个文件夹):
for i in {1..10}; do mv prefix_$i_suffix prefixnew_$i;done
但是运行会出错,显示没有“prefix”这个文件夹,后来完成才发现是变量使用过程中产生的问题。原本的变量名应该是“i”,但上述命令中的变量名变成了“i_suffix",而这个变量并没有被定义,也就没有值,所以for循环要修改的文件夹变成“prefix”,导致错位发生。
解决:
用反斜杠"** \ "链接变量名与后缀(即在“ $i”和“_suffix**”之间加个反斜杠):
for i in {1..10}; do mv prefix_$i\_suffix prefixnew_$i;done
我知道反斜杠在shell中有跳脱特殊符号的作用,也没搞清楚在此处的作用,不过这样做是可行的。
网友评论