regex - 在 shell 脚本中使用 "find"的问题

标签 regex shell unix

我前段时间写了一个 shell 脚本,该脚本自动对它在指定目录中找到的任何 c++ 文件运行 python 脚本。我测试了它,它工作正常,我保存它并忘记了它;问题是我回来使用它时遇到了问题(原来我没有对其进行足够的测试,嗯?)。

无论如何,我之前测试的源目录路径名称中没有空格,例如

/somedirectory/subfolder/src/

但是当我尝试使用其中包含空格的路径运行脚本时,例如

/Documents\ and\ Settings/subfolder/src/

它不起作用。

我已找到问题所在,但不确定如何解决。这是导致问题的代码:

names=( $(find "${SOURCE_ROOT_DIRECTORY}" -regex "[A-Za-z0-9]*.*\(cpp\|h\|cc\)$"))

正则表达式适用于没有空格的路径,所以我不确定正则表达式是否有问题,或者“查找”命令是否在遇到空格时停止。

有人能帮忙吗?

最佳答案

find 在找到名称中包含空格的文件时不会“停止”。当尝试将它们存储为数组中的元素时会出现问题。

将 IFS 更改为换行符(默认为空格):

#change IFS
OLDIFS=$IFS
IFS=$'\n' 

#run find
names=($(find . -regex "[A-Za-z0-9]*.*\(cpp\|h\|cc\)$"))

#restore IFS
IFS=$OLDIFS

#test out the array
echo "size: ${#names[@]}"
for i in "${names[@]}"
do
   echo "$i"
done

关于regex - 在 shell 脚本中使用 "find"的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6581662/

相关文章:

Bash命令行和输入限制

linux - 系统:Info perl module to get memory and space information

java - 不包括方括号的正则表达式

javascript - 将 JavaScript RegEx 转换为 JSON 格式

shell - 如何在 shell 脚本中捕获 SQLPlus 退出代码?

php - 通过 php 执行 bash 脚本

linux - 任何人都可以解释一下这个命令是如何工作的吗?

c - 如何检查文件在 Unix C 中是否相同?

使用只有 3 位索引的列表元素的正则表达式替换不能按我预期的那样工作

用于解析 "Accept" header 的正则表达式