【发布时间】:2020-03-16 16:51:23
【问题描述】:
由于缺少分隔空字符,我已阅读有关the downfalls of parsing ls、printf、echo 和其他的信息。
I asked a question about using functions 来解决这个问题,答案似乎正确地指出,因为我使用的是基本回声,所以会发生同样的问题。
但是,我最近读到 it is possible to output a null delimited character using printf(我会假设 echo -e)。
当然,for 循环提供了最大的灵活性,但是 printf 和 它对参数的隐式循环可以涵盖许多更简单的 案例。它甚至可以生成 NUL 分隔的流,非常适合以后使用 检索:
$ printf "%s\0" "${myarray[@]}" > myfile
如果这确实有效,它是否仅限于某些版本的 printf 或 bash,我可以重写我的 original questions 函数来使用
printf "%s\0" "$i"
而不是
echo "$i"
或者我可以使用以下内容吗?
echo -e "$i\0"
【问题讨论】:
-
想想
i='\n'时会发生什么 -
printf '%s\0' "$i"很好,实际上比echo -e更可取,因为它可以跨 POSIX 兼容的 shell 移植,而echo -e是一个 bash 扩展,用于将 POSIX 指定的行为恢复为 @987654333 @ 首先。 -
KamilCuk 有一个观点。当
i='\n'时,echo 将打印换行符,但 printf 将打印\n。顺便说一句,在像for f in glob这样的循环中过滤一些文件时使用数组更明智 -
你们中的某个人是否想将这些有用但短暂的 cmets 变成有用且永久的答案?或者找一个副本...
标签: bash