【问题标题】:`echo` (shell bash) sending integer values and not only chars and strings. Is it possible?`echo` (shell bash) 发送整数值,而不仅仅是字符和字符串。可能吗?
【发布时间】:2018-02-05 03:18:58
【问题描述】:

问题

echo -n 1 > /dev/LED写入1的ASCII值,即49对应的char十进制值。 好的,我可以在设备驱动程序中轻松管理 ASCII 字符,但问题是: 我可以在 Linux 中使用 shell bash 的echo 函数发送“无符号整数”吗? 目标是写出十六进制的0x01

上下文

我认为这并不重要,但我正在尝试将整数发送到 Linux 设备驱动程序内的 .write 函数。管理 ASCII 和以往一样容易,但我希望内核代码尽可能简单,因为它会影响性能。

【问题讨论】:

标签: linux bash shell char


【解决方案1】:

echo 只写字符串;如果您想要包含字符0x01 的字符串,则必须指定它。不过,您应该使用printf

printf '\x01' > /dev/LED

这适用于bash,但printf 的其他实现可能不支持十六进制转义。八进制是唯一支持的标准:

printf '\001' > /dev/LED

【讨论】:

    【解决方案2】:
    echo -en "\x01" > /dev/LED
    

    -e 选项告诉echo 解释转义序列,-n 告诉它省略尾随的新行。

    【讨论】:

    • echo -e 不可移植——echo 的任何版本在输出时除了在输出上打印-e 之外的任何操作都违反了相关的 POSIX 标准;并且 bash 的 echo 仅违反该标准有时 - 如果 xpg_echoposix 运行时标志都处于活动状态,则其行为是合规的,因此此代码不起作用。
    • 是的,我使用了-n,因为我看到它尝试写入换行符!
    • (-e 是“主动违规”,而不是扩展,因为它违反了规范中“实施不应支持任何选项”的黑白语言;@ 987654332@ 是唯一的例外,因为它被定义为使 echo 的行为在存在时未被标准定义——但是 undefined 行为并不是在你的程序)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 2023-03-21
    相关资源
    最近更新 更多