我前段时间写了一个 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/