여러 개의 로그 파일을 세고 있는데 범위는 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