要件に合わせて、このサンプル スクリプトを使用できます。詳細で変数名は長いですが、独自のカスタマイズを行うことができます。に依存せず、パス名展開の影響を受けないため、readarray
より安全に使用できます。A=($(...))
IFS
#!/bin/bash
DIR=/path/to/somewhere
readarray -t FILES < <(compgen -G "${DIR%/}/*.cfg") ## Store matches to array.
FILES_COUNT=${#FILES[@]} ## Match count.
FILES_NAMES=("${FILES[@]##*/}") ## No directory parts.
FILES_NAMES_WITHOUT_CFG=("${FILES_NAMES[@]%.cfg}") ## No .cfg extension.
if [[ FILES_COUNT -gt 0 ]]; then
printf "File: %s\n" "${FILES[@]}"
printf "Name: %s\n" "${FILES_NAMES[@]}"
printf "Name (no .cfg): %s\n" "${FILES_NAMES_WITHOUT_CFG[@]}"
printf "Total: %d\n" "$FILES_COUNT"
fi
各エントリのインデックス番号は同じであることに注意してください。もそう${FILES[1]}
です。エントリは index で始まります。${FILES_NAMES[1]}
${FILES_NAMES_WITHOUT_CFG[1]}
0
これにより、他の詳細を確認することもできます。
if [[ FILES_COUNT -gt 0 ]]; then
for I in "${!FILES[@]}"; do
printf "File: %s\n" "${FILES[I]}"
printf "Name: %s\n" "${FILES_NAMES[I]}"
printf "Name (no .sh): %s\n" "${FILES_NAMES_WITHOUT_CFG[I]}"
printf "Index number: $I\n\n"
done
printf "Total: %d\n" "$FILES_COUNT"
fi