我正在尝试在bash上运行下一个代码。它可以起作用,但事实并非如此。 你能帮我解决一下吗?我开始编程。 代码是这样的:
for i in {1:5}
do
cd path-to-folder-number/"$i"0/
echo path-to-folder-number/"$i"0/
done
示例
我想迭代具有数字(10,20..50)的文件夹,因此它将目录从“path-to-folder-number / 10 /”更改为“path-to-folder-number / 20” /“..等等。
我替换:用..但它还没有工作。当脚本被应用时,我得到:
can't cd to path-to-folder-number/{1..5}0/
答案 0 :(得分:1)
对于up范围,语法为:
for i in {1..5}
do
cd path-to-folder-number/"$i"0/
echo $i
done
因此请将:
替换为..
答案 1 :(得分:1)
要准确得到你想要的东西,你可以使用它:
for i in 10 {20..50}
do
echo $i
done
答案 2 :(得分:1)
我认为这里有三个问题:你使用了错误的shell,一个范围的错误语法,如果你解决了这些问题,你可能也会遇到连续cd
没有做你想做的事情的麻烦
shell问题是您使用sh
而不是bash
运行脚本。在某些系统上sh
实际上是bash(但在POSIX兼容模式下运行,某些高级功能已关闭),但我认为在你的系统上它是一个更基本的shell,没有任何 bash扩展名。
控制脚本运行的shell的最佳方法是在开头添加一个“shebang”行,说明要运行它的解释器。对于bash,这可能是#!/bin/bash
或#!/usr/bin/env bash
。然后通过将脚本放在$ PATH中的目录中运行脚本,或者显式地给出脚本的路径(例如,如果你在同一个目录中,则使用./scriptname
)。 不使用sh scriptname
运行它,因为它会覆盖shebang并使用基本shell,它将无效。
(顺便说一下,“shebang”这个名字来自行开头的“#!”字符 - “#”字符有时被称为“sharp”,而“!”有时被称为“bang”,所以它是“sharp-bang”,缩写为“shebang”。)
在bash中,大括号扩展中范围的正确语法是{1..5}
,而不是{1:5}
。请注意,大括号扩展是一个bash扩展,这就是为什么让正确的shell很重要。
最后,您还没有遇到过一个问题,但可能会解决前两个问题:cd
到path-to-folder-number/10/
,然后是path-to-folder-number/20/
等等你是不 cd
回到原来的目录,所以如果path-to-folder-number是相对的(即不以“/”开头) ,它会尝试cd
到path-to-folder-number/10/path-to-folder-number/20/path-to-folder-number/30/path-to-folder-number/40/path-to-folder-number/50/
。
IMO在脚本中使用cd
通常是一个坏主意,因为有很多事情可能会出错。很容易忘记脚本在哪个位置。如果任何cd
因任何原因失败,则脚本的其余部分将在错误的位置运行。如果您有相对路径指定的任何文件,那么只要您cd
在原始目录以外的地方,这些路径就会变为无效。
仅使用显式路径引用脚本中的文件位置就不那么脆弱了。因此,例如,使用cd "path-to-folder-number/${i}0/"; ls
。
ls "path-to-folder-number/${i}0/"
答案 3 :(得分:1)
您还可以使用seq
:
for i in $(seq 10 10 50); do
cd path-to-folder-number/$i/
echo path-to-folder-number/$i/
done