Shell 脚本,用于验证 FILES=$(ls) 是否包含文件的函数

Shell 脚本,用于验证 FILES=$(ls) 是否包含文件的函数

我是 shell 脚本编写的初学者,我需要找到一个函数来检查 bash 列表中是否存在变量。该列表是这样生成的:FILES=$(ls)所以我需要检查文件是否存在。我没有使用-e测试,因为我想通过同时比较两个文件夹来用并行来做一些奇怪的事情,如果我开始解释,那就太长了。

我找到了这个页面 https://stackoverflow.com/questions/8063228/how-do-i-check-if-a-variable-exists-in-a-list-in-bash

我不确定这对我来说是否方便,因为我不确定$FILES我创建的变量是否是一个与本页上的变量相同的列表,知道文件名中可能有一些空格。当我试图弄清楚时,搜索引擎向我显示了一些与 -ls 命令无关的内容。

另外问题是我不明白该页面上描述的函数中发生了什么。我正在谈论包含这样的表达式的函数:

 function contains() {
    [[ $1 =~ (^|[[:space:]])$2($|[[:space:]]) ]] && exit(0) || exit(1)
} 

我已经搜索了它的=~含义,似乎$a =~ $b测试了 if ba但我不知道这些奇怪的东西(^|[[:space:]])($|[[:space:]])意味着什么,当我尝试在搜索引擎上找到它时,它向我展示了一些 NASA 的东西,或者事件,如果我输入类似“shell script (^|[[:space:]]) ”的内容,它只是考虑单词“space”并完全忽略周围的符号,所以它向我展示了一些没有什么可去的东西。

另外我不明白为什么有一个“和”后面跟着一个“或”而没有任何括号或方括号,因为这些操作不应该是关联的。

答案1

^|[[:space:]])$2($|[[:space:]]是一个正则表达式。它周围的括号是没有用的。

  • ^标记字符串的开头
  • |意思是“要么是左边的图案,要么是右边的图案”
  • [[:space:]]是包含空格和制表符的字符类
  • $标记字符串的结尾

相关内容