使用for循环中的Bash,使用递增变量创建目录作为目录名称的一部分

时间:2014-03-27 04:12:00

标签: bash shell

我正在尝试编写一个bash脚本,它允许我使用递增名称自动创建多个目录。

例如,我正在尝试创建名为v0v1,v1v2,...,v40v41的目录。

我尝试使用' for'循环,我在其中创建一个变量并将其设置为等于i + 1的当前值(其中' i'是当前循环迭代),但它没有按预期工作。 我设法让变量增加(并使用' echo'来检查它),但我不能让它成为新目录名的一部分。

我写的代码如下:

for i in {0..40}; do let r=$((i+1)); mkdir v$iv$r; done

但是,生成的目录的名称只包含第一个变量值(即v0,v1,...,v40),并且不包含' v $ r'一点都不

有没有人有任何想法如何在同一个文件名中一次使用两个变量?

2 个答案:

答案 0 :(得分:1)

printf 'r=%d ; mkdir v$((r-1))v${r} ;' $(seq 2 41) |sh

根本不需要shell循环。

答案 1 :(得分:0)

for i in {0..40}; do let r=$((i+1)); mkdir v${i}v$r; done

当bash看到表达式v$iv$r时,它会替换变量ivr。但是,当然,没有iv。所以bash在空字符串中替换。解决方案是使用大括号来确保bash知道变量名称的结束位置。因此:v${i}v$r