删除从Bash中的输入文件读取的回车



Bash脚本:

#!/bin/bash
set -x
parent_folder=$(dirname $PWD)
// read from project-list file and assign to array
mapfile -t arr <project-list.txt
for i in "${arr[@]}"; do
cd "$parent_folder/$i"
done

问题:bash: cd: $'/d/workspace/node/notification-servicer': Not a directory。正在添加r。如何防止这种情况发生?

如果由于某种原因无法从project-list.txt中删除它们(否则这个问题就没有任何意义(,请在扩展arr时删除它们。

for i in "${arr[@]%$'r'}"; do
...

您可以先使用tr来更改mapfile语句以删除r

mapfile -t arr < <(tr -d 'r' < project-list.txt)

然后使用检查阵列内容

declare -p arr

如何防止这种情况

取决于您所说的是什么意思来防止。首先,我不会把它们放在project-list.txt中。一定是某个地方以某种方式创建了这个文件,而且很少真正需要在文件中有回车。预防将从这里开始。

如果由于任何原因这都不可能,您可以通过dos2unix:运行该文件

mapfile -t arr <(dos2unix project-list.txt)

或者,如果gitbash不支持进程替换(我没有安装它,所以我不能尝试(,你可以做一个

dos2unix <project-list.txt >project-list.sanitized
mapfile -t arr <project-list.sanitized

最新更新