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