0

我有一个 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 的迭代,以便我可以实现所需的输出(见上文)?

4

3 回答 3

3
for dir in $DIRECTORIES; do
  path="$MY_PATH/$dir"
  echo "Processing $path"
done
于 2012-10-17T00:28:31.973 回答
2

顺便说一句,这不是一个数组。使用数组看起来像这样:

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

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

于 2012-10-17T01:19:32.797 回答
0

如果文件夹名称中有空格

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
于 2012-10-17T04:26:43.233 回答