Почему команда tr допускает неожиданные символы? - PullRequest
0 голосов
/ 04 мая 2020

Я работаю в среде OMVS.

В следующей команде я не ожидал увидеть вывод с какими-либо NON alphanumeri c символами.

echo $(head /dev/urandom | tr -cd '[:alnum:]' | head -c 32)

Однако пример из того, что я вижу в выводе:

J0SPNN-b0PZwbwHzeMAqIE0ufKJdnNJb

Я понял, что показанный da sh ('-') является просто графическим представлением, но на самом деле разные шестнадцатеричные значения все показывают так. До сих пор я видел значения между x'30 'и x'3E', но ожидал, что tr -cd '[: alnum:]' будет передавать только a-zA-Z0-9, поэтому откуда берутся эти другие значения

1 Ответ

0 голосов
/ 04 мая 2020

Если я запускаю вашу команду на своем Ma c, я получаю «tr: Illegal byte sequence», и способ заставить его работать:

head /dev/urandom | LC_CTYPE=C tr -cd '[:alnum:]' | head -c 32

(Вам не нужно echo *. 1006 * То есть, указав ему использовать ввод как "C -строку", а не интерпретировать его как UTF8.

У меня нет запасной мэйнфрейм для тестирования, но я подозреваю, что ответ такой же.

...