gpt4 book ai didi

linux - 使用空字节作为分隔符将每个参数与参数的位置编号连接起来?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:39 26 4
gpt4 key购买 nike

我想将每个参数与参数的位置编号连接起来。我只想使用空字节作为分隔符。
以下是我想要的:

f() {
for ((i=1;i<$(($#+1));++i)); do
echo -n "$i"
echo -ne "\x00"
echo -n "${!i}"
echo -ne "\x00"
done
}

f a b c | hexdump -C
00000000 31 00 61 00 32 00 62 00 33 00 63 00 |1.a.2.b.3.c.|
0000000c

但是我想删除 for 循环(因为它很难看)并使用管道和/或进程替换。所以问题真的是:如何使用空字节作为分隔符来连接两个空字节分隔的流。我尝试使用粘贴:

printf '%s\x00' "$@" | paste -z -d '\0' <(seq $# | tr '\n' '\0') -

但是当使用 -d'\0' 调用粘贴时,粘贴将根本不插入定界符。在不指定分隔符的情况下,粘贴使用制表符。有没有办法让 paste 使用空字节作为列分隔符?是否有其他实用程序可以在这里使用?

最佳答案

为了完整起见,一个仅使用 printf 的非循环构造(但使用了两次):

printf "$(printf '%d\\000%%s\\000' $(seq $#))" "$@"

内部 printf 创建了一个预填充了序列号的格式字符串。 \000 是防止内插字符串开头的数字被合并到转义码中所必需的。

关于linux - 使用空字节作为分隔符将每个参数与参数的位置编号连接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50682628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com