Как сгенерировать все символы ASCII с расширением скобки? - PullRequest
1 голос
/ 06 июня 2019

Здесь перечислены все английские символы:

$ echo {A..Z}
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

Но как перечислить все символы ASCII?

Я пробовал это:

$ echo {\!..\~}
{!..~}

и это:

$ echo {$'!'..$'~'}
{!..~}

Но оба не работали.Возможно ли это?

Ответы [ 2 ]

3 голосов
/ 06 июня 2019

Используется только один printf, но более сложное расширение скобок.

printf '%b' \\x{0..7}{{0..9},{a..f}}

Это также работает, но не так хорошо (выводит много пробелов):

echo -e \\x{0..7}{{0..9},{a..f}}
2 голосов
/ 06 июня 2019
$ printf '%b\n' "$(printf '\%03o' {0..127})"



123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Чтобы увидеть представление непечатаемых символов в выводе из вышеприведенного и символов, скрытых в результате попытки распечатать их как есть, вы можете передать его на cat -v:

$ printf '%b\n' "$(printf '\%03o' {0..127})" | cat -v
^@^A^B^C^D^E^F^G^H
^K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^Z^[^\^]^^^_ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~^?

Для печати только из кода ASCII для ! (33) в код ASCII для ~ (126):

$ printf '%b\n' "$(printf '\%03o' {33..126})"
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

и для печати от ! до ~ без необходимости знать их числовые значения:

$ printf '%b\n' "$(eval printf '\\%03o' $(printf '{%d..%d}' "'!" "'~"))"
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

, который вы можете использовать с переменными оболочки для хранения начального и конечного символов:

$ beg='!'; end='~';
$ printf '%b\n' "$(eval printf '\\%03o' $(printf '{%d..%d}' "'$beg" "'$end"))"
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...