1. ホーム
  2. arrays

[解決済み] 要素に空白を含むBash配列

2022-04-23 04:39:33

質問

カメラのファイル名の配列をbashで構築しようとしています。

FILES=(2011-09-04 21.43.02.jpg
2011-09-05 10.23.14.jpg
2011-09-09 12.31.16.jpg
2011-09-11 08.43.12.jpg)

ご覧のように、各ファイル名の途中にはスペースがあります。

それぞれの名前を引用符で囲んだり、スペースをバックスラッシュでエスケープしてみましたが、どちらもうまくいきません。

配列の要素にアクセスしようとすると、スペースが要素の区切り文字として扱われ続けます。

ファイル名の中にスペースがある場合、どのようにすれば正しくキャプチャできますか?

どのように解決するのですか?

要素へのアクセス方法に問題があるのかもしれませんね。もし私が単純な for elem in $FILES というのは、私もあなたと同じ問題が発生するからです。しかし、このようにインデックスを通して配列にアクセスする場合、要素を数値またはエスケープで追加すると動作します。

for ((i = 0; i < ${#FILES[@]}; i++))
do
    echo "${FILES[$i]}"
done

これらの宣言のいずれかが $FILES は動作するはずです。

FILES=(2011-09-04\ 21.43.02.jpg
2011-09-05\ 10.23.14.jpg
2011-09-09\ 12.31.16.jpg
2011-09-11\ 08.43.12.jpg)

または

FILES=("2011-09-04 21.43.02.jpg"
"2011-09-05 10.23.14.jpg"
"2011-09-09 12.31.16.jpg"
"2011-09-11 08.43.12.jpg")

または

FILES[0]="2011-09-04 21.43.02.jpg"
FILES[1]="2011-09-05 10.23.14.jpg"
FILES[2]="2011-09-09 12.31.16.jpg"
FILES[3]="2011-09-11 08.43.12.jpg"