如何用例来识别BASH脚本中的特定模式

时间:2019-05-20 19:15:55

标签: 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| grep "1*"` ;; #trying to identify individual folders 101-121

  esac
done

不能很好地本地化文件夹。

2 个答案:

答案 0 :(得分:2)

[
  {
    "article_id": "ABC123",
    "document_title": "How to solve a Status",
    "rank": 0
  },
  {
    "article_id": "ABC678",
    "document_title": "Make it Status two",
    "rank": 1
  }
]

是一件可怕的事情。首先,您可能打算编写projectfolder= `ls -l| grep "1*"` (使用projectfolder=$(ls -l| grep "1*")来提高可读性,但是重要的细节是$()之后缺少空格),但这并不是一个好主意。为什么不只是=

答案 1 :(得分:1)

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

for projectfolder in {101..121} ; do
  [ -d "$projectfolder" ] && echo "'${projectfolder}' exists and is a directory." 
done

括号扩展不检查任何目录的存在,因此要查看实际存在的目录,可以使用[ -d测试每个目录。

Brace Expansion手册页中搜索bash(1),然后键入help test以获取更多信息