在 shell 脚本中通过 find 命令迭代列表返回

在 shell 脚本中通过 find 命令迭代列表返回

我试图.csv在目录中查找文件并将其名称分配给 shell 脚本中的变量。

我写了以下代码。

x="$(find extracted_data/*.csv)"
echo "$x"
IFS = $'\n'
for i in "${x[@]}"; do
        echo "${i}"
done

但是,运行此代码后,我得到以下输出:

extracted_data/another_file.csv 
extracted_data/sample.csv 
sheet.sh: 4: IFS: not found 
sheet.sh: 5: Bad substitution

代码中出现了什么错误,因为它给出了这两个错误?

我已经关注了以下两个链接来获取我的代码 循环查找 find 返回的文件名对于数组

答案1

首先,我将重申以下建议:不循环find输出

现在,解决您的问题:您的脚本中有一个相当简单的语法错误。变量赋值

IFS = $'\n'

一定不标志周围有空格=。 Shell 变量赋值必须采用以下形式

IFS=$'\n'

您可能想查看shellcheck,在许多 Linux 发行版中也可作为独立工具使用,以防止此类错误。

那就是说,您想要完成的事情可以通过简单地声明以更简单且不易出错的方式完成

for x in extracted_data/*.csv
do
  echo "$x"
done

如果文件名包含换行符(不幸的是,换行符是文件名的有效字符),这甚至不会中断。

相关内容