Ответ 1
Вы просто используете octal числа, так как ваши цифры имеют префикс 0.
Итак, это база 8, а не база 10.
От 0 до 40, есть 40 шагов?... для печати от A
до Z
for ((i=000;i<040;i++));do
echo -e $(eval "printf "\\\\%04o" $((65+0$i)) ");
done 2>/dev/null |
xargs
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
странно!?
Существует 85 шагов от 70 до 155:
for ((i=0070;i<0155;i++));do
echo -e $(eval "printf "\\\\%04o" $((19+0$i)) ");
done 2>/dev/null |
xargs
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Я хотел бы получить полный ответ, объяснив 𝒂𝒍𝒍 14 (59) нежелательные шаги.
: - р
Поскольку этот вопрос был закрыт, ответа не было добавлено, поэтому есть my пояснение:
Недостатки выполняются с помощью 2>/dev/null
!!
Итак, просто отбрасывая это:
for ((i=0070;i<0155;i++));do
echo -e $(eval "printf "\\\\%04o" $((19+0$i)) ");
done |
xargs
bash: 19+058: value too great for base (error token is "058")
bash: 19+059: value too great for base (error token is "059")
...
bash: 19+098: value too great for base (error token is "098")
bash: 19+099: value too great for base (error token is "099")
bash: 19+0108: value too great for base (error token is "0108")
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Все становится яснее!
for ((i=0070;i<0155;i++));do
echo -e $(eval "printf "\\\\%04o" $((19+0$i)) ")
done 2>&1 >/dev/null |
wc -l
27
На самом деле существует 27 ошибок, о числах от 58 до 108...
echo $((070)) $((0155))
56 109
Хорошо, он восьмеричный.
echo $(( 155 - 70 )) $(( 0155 - 070 )) $(( 109 - 56 ))
85 53 53
И это делает 53 шага, а не 85!
echo $((53-27))
26
Да!
Это правильное количество букв (в моем алфавите)!
Вопрос можно переписать как:
Как злоупотребление
/dev/null
может вызвать странное поведение
... В надежде, это может помочь кому-то.
Вы просто используете octal числа, так как ваши цифры имеют префикс 0.
Итак, это база 8, а не база 10.
У вас есть 31 шаг, потому что 040 octal для десятичного числа 32.
Octal - это система цифр с базой 8. Десятичная имеет базу 10 и шестнадцатеричную 16.
Почему вы не используете следующее для печати алфавита?
for letter in {A..Z} ; do
echo $letter
done