为什么我的脚本不起作用?

为什么我的脚本不起作用?

您好,我正在尝试使用 mv 命令和大括号扩展移动一组目录,如下所示:

#!/bin/bash
...
group_name=$1
group=$((total/set))
group=$((group-1))
mkdir "$group_name""1" 
mv dat{10.."$group"} "$group_name""1"
...

该函数的使用方法如下:

grouping_dirs 总集 group_name

例如:grouping_dirs 30 2 dir_name

我的目录列表是:

dat10 dat11 dat12 dat13 dat14 dat15 等等。

但我只想将目录 dat{10..14} 移动到 dir_name1。

但是我收到以下错误:

mv:无法统计“dat{10..14}”:没有这样的文件或目录

即使目录存在。我知道这一点是因为我尝试改变:

mv dat{10.."$group"} ... to mv dat{10..14} ...

它起作用了。我认为我在大括号内没有正确使用“”,但我对 bash 脚本相当陌生......所以我将感谢您的见解!谢谢!

答案1

问题是在 Bash 中,大括号扩展发生在变量扩展之前。这意味着大括号扩展不会考虑变量。您可以使用:

eval "echo dat{10..$group}"

它将输出如下:

dat10 dat11 dat12 dat13 dat14

在你的情况下使用:

mv $(eval "echo dat{10..$group}") "$group_name""1"

相关内容