![关于这部分代码我能知道什么?](https://linux22.com/image/36860/%E5%85%B3%E4%BA%8E%E8%BF%99%E9%83%A8%E5%88%86%E4%BB%A3%E7%A0%81%E6%88%91%E8%83%BD%E7%9F%A5%E9%81%93%E4%BB%80%E4%B9%88%EF%BC%9F%20.png)
脚本的这一部分有什么作用?这是 bash 脚本的一部分
for j in *.* ; do
cp $j ../../$name-S$i.gid/data/${j%%.*}$i.${j#*.}
sed "s/$name-S/$name-S$i/" $j > ../../$name-S$i.gid/data/${j%%.*}$i.${j#*.}
done
我忘了说“i”是一个从 1 到特定数字的参数,“$name”是文件夹名称的一部分。
答案1
这是愚蠢的代码。首先,我重写它,使之变得显而易见(我也添加了引用):
for j in *.* ; do
target_file="../../$name-S$i.gid/data/${j%%.*}$i.${j#*.}"
cp "$j" "$target_file"
sed "s/$name-S/$name-S$i/" "$j" >"$target_file"
done
即,复制文件后立即覆盖新文件。对名称中包含点的所有文件执行此操作(但可能不在开头;取决于(在bash
)中的设置dotglob
)。
目标文件路径构造为:
将其放在另一个目录中。
删除文件扩展名(它的所有部分,即从第一个点开始的所有内容)。
添加号码
i
,然后添加旧分机。
该调用仅将一行中sed
第一次出现的(即其扩展)替换为(其再次扩展)。$name-S
$name-S$i