tr命令为什么允许意外字符?

问题描述 投票:0回答:1

我正在OMVS环境上运行。

在以下命令中,我没想到会看到带有任何非字母数字字符的输出。

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

但是我在输出中看到的示例是:

J0SPNN-b0PZwbwHzeMAqIE0ufKJdnNJb

我已经意识到所示的破折号('-')仅是图形表示,但是实际上所有不同的十六进制值都这样显示。到目前为止,我已经看到x'30'和x'3E'之间的值,但是希望tr -cd'[:alnum:]'仅传递a-zA-Z0-9,所以这些其他值从何而来?

unix tr
1个回答
0
投票

如果我在Mac上运行您的命令,则会得到“ tr:非法字节序列”,并且可以使它起作用的方式是:

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

((您不需要周围的echo语句。)

即,告诉它将输入用作“ C字符串”,而不是将其解释为UTF8。

我没有备用的大型机要测试,但是我怀疑答案是相同的。

© www.soinside.com 2019 - 2024. All rights reserved.