시작 범위는 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

관련 정보