我运行-bash: warning: command substitution: ignored null byte in input
model=$(cat /proc/device-tree/model)
bash --version
GNU bash, version 4.4.12(1)-release (arm-unknown-linux-gnueabihf)
使用bash版本4.3.30,一切正常
我理解问题是文件中的终止\0
字符,但是如何抑制这个愚蠢的消息呢?因为我正在使用bash 4.4
答案 0 :(得分:11)
如果您只想删除空字节:
model=$(tr -d '\0' < /proc/device-tree/model)
答案 1 :(得分:8)
您可能需要两种可能的行为:
读到第一个NUL。这是更高效的方法,因为它不需要shell的外部进程。在发生故障后检查目标变量是否为非空,以确保在读取内容但输入中不存在NUL的情况下成功退出状态(否则将导致非零退出状态)。
IFS= read -r -d '' model </proc/device-tree/model || [[ $model ]]
读取忽略所有NUL。这可以使您获得与bash的更新(4.4)版本相同的行为。
model=$(tr -d '\0' </proc/device-tree/model)
您也可以使用内置函数实现它,如下所示:
model=""
while IFS= read -r -d '' substring || [[ $substring ]]; do
model+="$substring"
done </proc/device-tree/model