防止循环的bash脚本中的变量迭代



我有一个bash脚本,在其中我定义了一个特定的路径:

MY_PATH=/to/my/path

我在MY_PATH中也有一组目录,我将这些目录存储在一个数组中,例如:

DIRECTORIES="/dir1/
/dir2/
/dir3/"

我想做的是迭代$MY_PATH中的所有$DIRECTORIES,所以我尝试了这个:

for dir in $MY_PATH$DIRECTORIES
do
echo "Processing $dir"
end

然而,这会产生以下不希望的输出:

Processing /to/my/path/dir1/           #Correct!
Processing /dir2/                      #What I want: Processing /to/my/path/dir2/
Processing /dir3/                      #What I want: Processing /to/my/path/dir3/

是否有任何方法可以防止$MY_PATH上的迭代,同时保留$DIRECTORIES上的迭代以便实现所需的输出(见上文)?

for dir in $DIRECTORIES; do
path="$MY_PATH/$dir"
echo "Processing $path"
done

顺便说一句,这不是数组。使用数组如下所示:

MY_PATH=/to/my/path
DIRECTORIES=(dir1 dir2 dir3)
for dir in "${DIRECTORIES[@]}"; do
path="$MY_PATH/$dir"
echo "Processing $path"
done

(这不是一个答案,但上面的代码不适合评论。:)

如果文件夹名称中有空格

MY_PATH="/to/my/path"

你正在使用换行符来分隔文件夹,就像之前一样

DIRECTORIES="/dir1/
/dir2/
/dir3/"

是一个稍微安全的循环

OLDIFS=$IFS
IFS=$'n'
for dir in $DIRECTORIES; do
path="$MY_PATH/$dir"
echo "Processing $path"
done
IFS=$OLDIFS

最新更新