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/

$DIRECTORIES の繰り返しを維持しながら $MY_PATH の繰り返しを防止して、目的の出力を達成できるようにする方法はありますか (上記を参照)。

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 に答える