我正在计算多个日志文件,其范围从 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