![为什么我的脚本不起作用?](https://linux22.com/image/152279/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E8%84%9A%E6%9C%AC%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F%20.png)
您好,我正在尝试使用 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"