我试图.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
如果文件名包含换行符(不幸的是,换行符是文件名的有效字符),这甚至不会中断。