关于这部分代码我能知道什么?

关于这部分代码我能知道什么?

脚本的这一部分有什么作用?这是 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)。

目标文件路径构造为:

  1. 将其放在另一个目录中。

  2. 删除文件扩展名(它的所有部分,即从第一个点开始的所有内容)。

  3. 添加号码i,然后添加旧分机。

该调用仅将一行中sed第一次出现的(即其扩展)替换为(其再次扩展)。$name-S$name-S$i

相关内容