2017-11-18 8 views
4

を示しています。バッシュは、私は、配列内の現在のディレクトリのファイルを置きたいと、このスクリプトを使用して、各ファイルをエコー最初の要素だけ

#!/bin/bash 

files=(*) 

for file in $files 
do 
    echo $file 
done 

# This demonstrates that the array in fact has the values from (*) 
echo ${files[0]} ${files[1]} 

echo done 

出力:

echo.sh 
echo.sh read_output.sh 
done 

最初の要素だけがforループに表示される理由は誰にも分かりますか?

答えて

8

$filesは、配列の最初の要素に展開されます。 echo $filesを試してみると、配列の最初の要素だけが出力されます。 forループは、同じ理由で1つの要素だけを出力します。

配列のすべての要素に展開する場合は、${files[@]}と書く必要があります。

Bashの配列の要素を反復処理するための正しい方法:

for file in "${files[@]}" 
+1

二重引用符は、このイディオムの必要な一部と見なされるべきであることに注意してください。それらがなければ、配列要素の中のいくつかの文字(スペース、ワイルドカードなど)から奇妙な効果を得ることができます。 –

関連する問題