相关疑难解决方法(0)

如何在 Bash 中使用空字节?

我读过,因为 Bash 中的文件路径可以包含除空字节(零值字节$'\0')之外的任何字符,所以最好使用空字节作为分隔符。例如,如果将 的输出find发送到另一个程序,则建议使用该-print0选项(对于find具有它的版本)。

但是,虽然这样的事情工作正常(打印由换行符分隔的文件路径 - 别担心,这只是一个演示,我实际上并没有在实际脚本中这样做):

find -print0 \
  | while IFS= read -r -d $'\0' ; do echo "$REPLY" ; done
Run Code Online (Sandbox Code Playgroud)

这样的事情就不会工作:

for file in * ; do echo -n "$file"$'\0' ; done \
  | while IFS= read -r -d $'\0' ; do echo "$REPLY" ; done
Run Code Online (Sandbox Code Playgroud)

当我只尝试for-loop 部分时,我发现它只是将所有文件名打印在一起,中间没有空字节。

为什么是这样?这是怎么回事?

bash null

39
推荐指数
1
解决办法
3万
查看次数

bash 无法将十六进制值 0x00 存储在变量中

我正在尝试用 dd 做一些技巧。我认为可以将一些十六进制值存储在名为“header”的变量中以将其通过管道传输到 dd。

我没有变量的第一步是这样的:

$ echo -ne "\x36\xc9\xda\x00\xb4" |dd of=hex
$ hd hex

00000000  36 c9 da 00 b4                                    |6....|
00000005
Run Code Online (Sandbox Code Playgroud)

之后我尝试了这个:

$ header=$(echo -ne "\x36\xc9\xda\x00\xb4") 
$ echo -n $header | hd

00000000  36 c9 da b4                                       |6...|
00000004
Run Code Online (Sandbox Code Playgroud)

如您所见,我\x00$header变量中丢失了值。有没有人对这种行为有解释?这真让我抓狂。

linux bash dd shell-script

13
推荐指数
2
解决办法
5722
查看次数

标签 统计

bash ×2

dd ×1

linux ×1

null ×1

shell-script ×1