我收到-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)
Run Code Online (Sandbox Code Playgroud)
使用bash版本4.3.30就可以了
我理解问题是\0文件中的终止字符,但是如何抑制这个愚蠢的消息呢?因为我正在使用bash 4.4,所以我的整个剧本都搞砸了
Kev*_*vin 13
如果您只想删除空字节:
model=$(tr -d '\0' < /proc/device-tree/model)
Run Code Online (Sandbox Code Playgroud)
Cha*_*ffy 10
您可能需要两种可能的行为:
读到第一个NUL.这是更高效的方法,因为它不需要shell的外部进程.检查目标变量是否非空的故障保证在内容被读出的情况下的成功退出状态之后,但没有在NUL输入存在(其否则将导致非零退出状态).
IFS= read -r -d '' model </proc/device-tree/model || [[ $model ]]
Run Code Online (Sandbox Code Playgroud)读取忽略所有NUL.这使您获得与bash的较新版本(4.4)相同的行为.
model=$(tr -d '\0' </proc/device-tree/model)
Run Code Online (Sandbox Code Playgroud)
您也可以使用内置函数实现它,如下所示:
model=""
while IFS= read -r -d '' substring || [[ $substring ]]; do
model+="$substring"
done </proc/device-tree/model
Run Code Online (Sandbox Code Playgroud)