我是 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 b
,a
但我不知道这些奇怪的东西(^|[[:space:]])
和($|[[:space:]])
意味着什么,当我尝试在搜索引擎上找到它时,它向我展示了一些 NASA 的东西,或者事件,如果我输入类似“shell script (^|[[:space:]]) ”的内容,它只是考虑单词“space”并完全忽略周围的符号,所以它向我展示了一些没有什么可去的东西。
另外我不明白为什么有一个“和”后面跟着一个“或”而没有任何括号或方括号,因为这些操作不应该是关联的。
答案1
^|[[:space:]])$2($|[[:space:]]
是一个正则表达式。它周围的括号是没有用的。
^
标记字符串的开头|
意思是“要么是左边的图案,要么是右边的图案”[[:space:]]
是包含空格和制表符的字符类$
标记字符串的结尾