如何在 bash 中不使用 printf 将字符转换为 ASCII

4 bash shell

ascii() {printf '%d' "'$1"}
Run Code Online (Sandbox Code Playgroud)

我目前正在使用此函数将字符转换为 ASCII,但是我只想将函数的结果存储为变量而不打印 ascii。我该怎么办呢?(请记住,我总共只使用了几个小时的 bash,如果这是一个愚蠢的问题,我很抱歉。)

M. *_*din 5

在 bash 中,之后

printf -v numval "%d" "'$1"
Run Code Online (Sandbox Code Playgroud)

该变量numval(您可以使用任何其他有效的变量名称)将保存位置参数中包含的字符串的第一个字符的数值$1

或者,您可以使用命令替换:

numval=$(printf "%d" "'$1")
Run Code Online (Sandbox Code Playgroud)

请注意,它们仍然使用printf但不会将任何内容打印到stdout.

正如@Charles Duffy的评论中所述,该printf -v版本更高效,但可移植性较差(标准 POSIX shell 不支持该-v选项)。

  • “printf -v”版本虽然可移植性较差,但效率明显更高;值得指出的是,使用它有实际的优势,而不是暗示这两种选择实际上是等效的。(真正的 David Korn ksh93 在执行 `var=$(printf ...)` 操作时优化了子 shell,但至少在撰写本文时,bash 还没有)。 (2认同)