起始范围从 1 开始

起始范围从 1 开始

我正在计算多个日志文件,其范围从 1 开始,但它是从 0 开始。

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

for 1 int ${!path}; do

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

done

答案1

您的 shell 代码没有什么意义,因为它在循环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数组从索引零开始。每个索引加 1:

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

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

相关内容