Bash 脚本:将文件内容解析为数组

Bash 脚本:将文件内容解析为数组

问候,

我正在编写一个简单的 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)

相关内容