次のようなコードがあるとします:
for i in $(find * -type f -name "*.txt"); do
# echo [element by it's index]
done
可能であれば、インデックスによって要素にアクセスするにはどうすればよいですか?
答え1
あなたの命令
$(find * -type f -name "*.txt")
配列ではなく、(スペースで区切られた) bash リストを返すため、個々の要素に「ターゲットを絞った」方法でアクセスすることはできません。
これをbash配列に変換するには、
filearray=( $(find * -type f -name "*.txt") )
(スペースに注意してください!)
その後、次のように個々のエントリにアクセスできます。
for ((i=0; i<n; i++))
do
file="${filarray[$i]}"
<whatever operation on the file>
done
エントリの数は以下から取得できます。
n="${#filearray[@]}"
ただし、こののみファイル名に特殊文字(特にスペース)が含まれていない場合に機能します。したがって、もう一度言いますが、ls
またはの出力を解析することfind
は推奨されませんあなたの場合は、-exec
のオプションでfind
必要なことが達成できるかどうかを確認することをお勧めします。