【问题标题】:How do you convert characters to ASCII without use of the printf in bash如何在不使用 bash 中的 printf 的情况下将字符转换为 ASCII
【发布时间】:2022-01-04 20:21:49
【问题描述】:
ascii() {printf '%d' "'$1"}

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

【问题讨论】:

  • 仅供参考,您的函数不是问题中当前显示的有效语法 - 它需要更多语法。 ascii() { printf '%d' "'$1"; } -- 注意添加的空格和;,这是单行函数声明所必需的。
  • VAR=$(ascii $CHAR|awk '{print $4}')
  • 如果您只使用 bash 几个小时,那么现在开始使用可能更适合您实际任务的语言还为时不晚。

标签: bash shell


【解决方案1】:

在 bash 中,之后

printf -v numval "%d" "'$1"

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

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

numval=$(printf "%d" "'$1")

请注意,这些仍然使用printf,但不会向stdout 打印任何内容。

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

【讨论】:

  • printf -v 版本虽然便携性较差,但效率显着提高;值得一提的是,使用它有实际优势,而不是潜在地暗示这两种选择实际上是等效的。 (当您执行 var=$(printf ...) 时,真正的 David Korn ksh93 会优化掉子外壳,但至少在撰写本文时,bash 没有)。
猜你喜欢
  • 2010-10-27
  • 2015-04-20
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2010-12-30
  • 2017-07-12
  • 1970-01-01
  • 2020-08-08
相关资源
最近更新 更多