gpt4 book ai didi

linux - 为 ASCII 表中的每个字符创建一个文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:15:14 27 4
gpt4 key购买 nike

我想编写一个程序来创建以 ASCII 表中的字符命名的文件。所以128个文件从1到127

我做了这样的事情:

    #!/bin/bash

temp=0;

for (( x=0; $x <= 177; x++ )) ; do
temp=$((temp+1))
if [ "$temp" = 8 ]; then
temp=$((0))
x=$((x+3))
fi

echo "$x"

`touch $'\"$x"'`
done

我知道它写得很奇怪,但是这个程序做的是:在 oct 中从 0 计数到 127(因此从 0 到 177oct)。问题是 touch $'\"$x"' 无法正常工作。

尽管 touch $'\101' 会创建一个名为“A”的文件。

谁能帮帮我?

最佳答案

这会起作用:

for num in {0..127}; do
printf -v fname "\x$(printf '%x' "$num")"
touch "$fname"
done

注意文件名中不允许出现空字符和/

这是它的作用:

外面

printf -v fname '\x<i>HH</i>'

将具有十六进制值 HH(一个或两个数字)的字节存储在变量 fname 中。这解决了以下问题:对于值 10(ASCII 换行符),命令替换将去除换行符(就像在该答案的先前修订版中所做的那样),只留下空字符串。

内部

printf '%x' "$num"

num 的值打印为十六进制数,然后用作外部 printf< 的 HH.

比如说,num 的值是十进制的 80。内部替换是这样做的:

$ printf '%x' 80
50

因此内部命令替换的值为 50(80 为十六进制)。现在命令变成了

printf -v fname "\x50"

因为

$ printf "\x50"
P

下一个命令变成了

touch P

这就是我们想要的。

关于linux - 为 ASCII 表中的每个字符创建一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46675452/

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