我正在尝试将一组固定的 ASCII 字符映射到一组固定的 Unicode 字符。即,对于每个数字 0-9,我想获得等效的圆圈数字。
\nmapFrom="0123456789"\nmapTo="\xe2\x9e\x80\xe2\x9e\x81\xe2\x9e\x82\xe2\x9e\x83\xe2\x9e\x84\xe2\x9e\x85\xe2\x9e\x86\xe2\x9e\x87\xe2\x9e\x88"\n\ntoday=20221018\n\n#convert to "\xe2\x9e\x81\xe2\x9e\x81\xe2\x9e\x81\xe2\x9e\x80\xe2\x9e\x80\xe2\x9e\x87"\ntodayWithCircles=$(do_something_here) # <-- what's the "something"?\n\necho $todayWithCircles\n# output: \xe2\x9e\x81\xe2\x9e\x81\xe2\x9e\x81\xe2\x9e\x80\xe2\x9e\x80\xe2\x9e\x87\nRun Code Online (Sandbox Code Playgroud)\n给定两个长度相等的固定字符串,根据它们在字符串中的位置来映射它们的最简单方法是什么?
\n一种快速而肮脏的perl翻译方法:
#!/usr/bin/env bash\n\nmapFrom="0123456789"\nmapTo="\xe2\x9e\x80\xe2\x9e\x81\xe2\x9e\x82\xe2\x9e\x83\xe2\x9e\x84\xe2\x9e\x85\xe2\x9e\x86\xe2\x9e\x87\xe2\x9e\x88"\ntoday=20221018\n\nperl -CSD -Mutf8 -pe "tr/$mapFrom/$mapTo/" <<<"$today"\nRun Code Online (Sandbox Code Playgroud)\n输出
\n\xe2\x9e\x81\xe2\x9e\x81\xe2\x9e\x81\xe2\x9e\x80\xe2\x9e\x80\xe2\x9e\x87\nRun Code Online (Sandbox Code Playgroud)\n(当然,假设脚本以 UTF-8 编码。-CSD告诉 perl 对标准输入、输出和其他打开的文件使用 UTF-8 编码,-Mutf8告诉它脚本本身( 的参数-e)以 UTF-8 编码.)
如果您有可用的 GNU sed,则可以使用它:
\nsed "y/$mapFrom/$mapTo/" <<<"$today"\nRun Code Online (Sandbox Code Playgroud)\n(请参阅此 unix stackexchange Q&A了解为什么tr不合适)