Linux 如何使用case在BASH脚本中识别特定模式

Linux 如何使用case在BASH脚本中识别特定模式,linux,bash,Linux,Bash,我试图在脚本中识别几个从101-121运行的文件夹。编写脚本是为了一次查看一个特定文件夹 我得到的错误是: command not found Usage: grep [OPTION]... PATTERN [FILE]... Try 'grep --help' for more information. 我的一段代码不起作用 for i in 1; do case $i in 1) projectfolder= `ls -l|

我试图在脚本中识别几个从101-121运行的文件夹。编写脚本是为了一次查看一个特定文件夹

我得到的错误是:

command not found
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
我的一段代码不起作用

for i in 1;                 
do
  case $i in    
    1)

    projectfolder= `ls -l| grep "1*"` ;; #trying to identify individual folders 101-121

  esac
done
无法很好地本地化文件夹

projectfolder= `ls -l| grep "1*"`

这是一件可怕的事情。首先,您可能打算编写
projectfolder=$(ls-l | grep“1*)
(为了可读性使用
$()
,但重要的细节是
=
后缺少空间),但这样做也是一个坏主意。为什么不在1*中为i做
;是否…

如果您的项目文件夹都遵循您描述的命名模式,则应使用大括号展开展开到编号
101..121
,然后轻松地对其进行迭代:

for projectfolder in {101..121} ; do
  [ -d "$projectfolder" ] && echo "'${projectfolder}' exists and is a directory." 
done
大括号扩展不检查任何目录是否存在,因此要查看实际存在的目录,可以使用
[-d
测试每个目录


bash(1)中搜索大括号扩展
手动页面和键入
帮助测试
了解更多信息

旁注:。另外,请在发布语法问题之前使用。哪一行是第25行?您只发布了8行。您是否通过@hek2mgl运行脚本?为什么网站在使用Bash标记时不通知用户有关Shellcheck的信息?或者更好,通过She运行他们的代码ll检查它们?为什么我们几乎每一个问题都要手动重复它?哇,这太令人惊讶了。shellcheck再也找不到语法错误了?虽然
projectfolder=$(cmd没有输出)
肯定会生成警告,但这不是语法错误。这是一件非常奇怪的事情。(在未执行的空简单命令的环境中设置变量。)如果为未运行的命令设置了环境变量,有人听到了吗?此外,
1*
匹配所有内容;我认为其目的是
'^1'
。但无论如何,您的glob是替代方法。