開始範囲は1から始まります。

開始範囲は1から始まります。

複数のログファイルを数えていますが、範囲は1から始まりますが、0から始まります。

path=(/home/folder/text/*)

for 1 int ${!path}; do

         printf "$s: $s\n" $i "${list[i]##*/}";

done

答え1

forシェルコードは、インデックスを取得するためにループと置換で無効な構文を使用し、printf型文字列も正しく使用しないため意味がありません。

私はあなたが次のようなことをしたいと思います:

i=0
for pathname in /home/folder/text/*; do
    i=$(( i + 1 ))
    printf '%s: %s\n' "$i" "$( basename "$pathname" )"
done

/home/folder/text(非表示の名前を除く)の下にある名前が一覧表示されます。

ご希望の場合は"$( basename "$pathname" )"上記の内容を 。"${pathname##*/}"

自分のコードに示されている配列を使用してください。

pathnames=( /home/folder/text/* )

i=0
for pathname in "${pathnames[@]}"; do
    i=$(( i + 1 ))
    printf '%s: %s\n' "$i" "$( basename "$pathname" )"
done

配列のインデックスを繰り返しますか?

pathnames=( /home/folder/text/* )

for index in "${!pathnames[@]}"; do
    printf '%s: %s\n' "$index" "$( basename "${pathnames[$index]}" )"
done

配列はbashインデックス0から始まります。各インデックスに1を追加します。

pathnames=( /home/folder/text/* )

for index in "${!pathnames[@]}"; do
    printf '%s: %s\n' "$(( index + 1 ))" "$( basename "${pathnames[$index]}" )"
done

関連情報