![Bash 脚本:将文件内容解析为数组](https://linux22.com/image/504097/Bash%20%E8%84%9A%E6%9C%AC%EF%BC%9A%E5%B0%86%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E8%A7%A3%E6%9E%90%E4%B8%BA%E6%95%B0%E7%BB%84.png)
问候,
我正在编写一个简单的 bash 脚本,需要将文件的内容解析为数组。文件中的条目以“换行符”分隔 - 因此文件看起来如下所示:
path/to/file
path/to/other/file
我想解析内容并对其进行迭代。我的代码目前如下所示:
CONTENT=`cat /path/to/text/file.txt`
for PATH in $CONTENT
do
echo $PATH
chmod -R 440 $PATH
fi
此代码在处理带有 UNIX 行尾的文件时运行良好。但是,在处理 Windows 格式的文本文件时,它就非常卡住了。“echo $PATH”语句生成了正确的路径,但 chmod 失败,提示文件不存在。我的诀窍是 Windows 行尾不会被修剪,因此它尝试 chmod 包含换行符的文件路径。
无论目标文件是用 Unix 还是 Windows 换行符创建的,我都需要让它工作——但鉴于我对 shell 脚本还不太熟悉,我并不太清楚该如何去做。
我感谢您的帮助!
答案1
听起来你只需要在处理每一行时删除回车符。真正简单的方法是使用dos2unix
实用程序,但如果您的系统没有该实用程序或您无法获得它,您可以使用 完成类似的事情tr
,例如:
echo $PATH | tr -d '\r'
更多想法,例如使用sed
,可在维基百科入口。
编辑: 我应该指出,这$PATH
不是一个很好的变量名,因为它无疑是由环境设置的,其他程序可能依赖于它的值。您应该考虑将其更改为类似 的内容$CUR_PATH
。
答案2
我只需改变脚本的第一行:
CONTENT=$(tr -d \\r < /path/to/text/file.txt)