Bash 我的循环cp一衬板有什么问题?

Bash 我的循环cp一衬板有什么问题?,bash,Bash,我在当前目录中有一个名为0\u 400x24\u multi\u newton20的目录。我想把它复制成2_400x24_multi_newton20,4_400x24_multi_newton20 所以我使用下面的代码 for((i=2;i<21;i=i+2)); do cp -r "0_400x24_multi_newton20/" "$i_400x24_multi_newton20/"; done 工作 那么如何正确地做呢 for((i=2;i<21;i=i+2)); do

我在当前目录中有一个名为
0\u 400x24\u multi\u newton20
的目录。我想把它复制成2_400x24_multi_newton20,4_400x24_multi_newton20

所以我使用下面的代码

for((i=2;i<21;i=i+2)); do cp -r "0_400x24_multi_newton20/" "$i_400x24_multi_newton20/"; done
工作

那么如何正确地做呢

for((i=2;i<21;i=i+2)); do cp -r "0_400x24_multi_newton20/" "${i}_400x24_multi_newton20/"; done
for((i=2;iMay by

for((i=2;i<21;i=i+2)); do cp -r "0_400x24_multi_newton20/" "${i}_400x24_multi_newton20/"; done

for((i=2;错误消息有一个前导的
/
,但您的代码没有。您确定这是产生错误的代码吗?@P.P.是的,请参见此处,在您的示例中,shell查找一个名为
i_400x24_multi_newton20
的变量,该变量未定义。因此
cp
命令被扩展为
cp-r“0_400x24_multi_Newton 20/”“/“
,因此,该命令试图将
0_400x24_multi_newton20
复制到根
/
,因此,您会收到错误,因为您没有
/
的写入权限。下面@M.Dogru提供的答案修复了问题。@zhliu03谢谢,这是一个很好的解释。因此,我刚刚找到了这句话“${parameter}”与$parameter相同,即变量参数的值。在某些上下文中,只有不太模棱两可的${parameter}形式有效。“那么这是否意味着在任何情况下,我们都应该使用${i}并且是安全的?是的,在我看来,始终使用${i}是一种很好的做法。”错误消息有一个前导的
/
,但您的代码没有。您确定这是产生错误的代码吗?@P.P.是的,在您的示例中,shell查找名为
i_400x24_multi_newton20
,未定义的变量。因此
cp
命令将扩展为
cp-r“0_400x24_multi_newton20/”
,因此,该命令试图将
0_400x24_multi_newton20
复制到根
/
,因此,您会收到错误,因为您没有
/
的写入权限。下面@M.Dogru提供的答案修复了问题。@zhliu03谢谢,这是一个很好的解释。因此,我刚刚找到了这句话“${parameter}”与$parameter相同,即变量参数的值。在某些上下文中,只有不太模棱两可的${parameter}形式有效。“那么这是否意味着在任何情况下,我们都应该使用${i}并且是安全的?是的,在我看来,始终使用${i}是一种很好的做法。”哦,是的。它很有效!但是为什么?我看到的教程总是
$I
$I没有扩展,所以应该使用{}这里的问题不是
$i没有解释
,而是shell将
$i_400x24_multi_newton 20
作为一个整体展开,因为它不存在,所以用一个空值替换它。@sjsam非常感谢你,sjsam。现在我真的理解了整个事情。哦,是的。它工作了!但是为什么?我看到的教程总是
$i
$i
$i不是扩展所以应该使用{}这里的问题不是
$i不是解释
,而是shell将
$i_400x24_multi_newton 20
扩展为一个整体,因为它不存在,所以用一个空值替换它。@sjsam非常感谢你,sjsam。现在我真正理解了整个事情。