【发布时间】:2014-02-21 03:04:21
【问题描述】:
有没有办法使用 bash 或 perl 脚本打印 ASCII 字符“├──”和“└──”? 我希望它与“树”的输出完全一样。
[root@localhost www]# tree -L 1
.
├── cgi-bin
├── error
├── html
└── icons
【问题讨论】:
有没有办法使用 bash 或 perl 脚本打印 ASCII 字符“├──”和“└──”? 我希望它与“树”的输出完全一样。
[root@localhost www]# tree -L 1
.
├── cgi-bin
├── error
├── html
└── icons
【问题讨论】:
它们看起来是扩展 ascii 代码的一部分。你可以在这里看到他们http://www.asciitable.com/
也可在此处的 Unicode 表中找到:http://unicode-table.com/en/sections/box-drawing/
我相信 192、195 和 196 是您所追求的。 在 Unicode 2501、2514 和 2523 中。
编辑
找到了一个相关的堆栈问题here,建议使用Unicode打印。
你想要的是能够打印unicode,答案在
perldoc perluniintro。 您可以使用\x{nnnn},其中 n 是十六进制标识符,或者您可以使用名称:\N{...}:
perl -E 'say "\x{2514}"; use charnames; say "\N{BOX DRAWINGS LIGHT UP AND RIGHT}"'
【讨论】:
echo -e "\0342\0224\0224\0342\0224\0200\0342\0224\0200 \033[01"
【讨论】:
这里有 3+ 个不同的答案...
HorizT='├'
HLine='─'
echo $HorizT$HLine$HLine
├──
正如你所说的 tree 作为输出样本,你可以运行类似的东西
tree / | sed -ne '2{p;q}'
├── bin
tree / | sed -ne '2{p;q}' | od -An -t o1
342 224 234 342 224 200 342 224 200 040 142 151 156 012
将您的参考输出为 八进制 值。
知道 Unicode 使用可变字节数,您的参考字符串包含 3 个 unicode 字符,看起来像 3 组 3 个值,以 342 开头。
所以你可以试试:
printf "\342\224\234\n"
├
printf -v HorizontalT "\342\224\234"
printf -v Hline "\342\224\200"
echo $HorizontalT$Hline$Hline$Hline
├───
charmap 搜索特定字符
您可以使用专用的 Unicode 浏览器,例如 Debian Gnome GNU/Linux 下的 charmap:
浏览并找到你的角色,然后在第二个标签上:Character Details:
你可以阅读各种有用的表示->八进制转义:
printf '\342\224\234\n'
├
printf 打印 Unicode 字体
一旦你知道 unicode 值,你就可以使用printf 来创建变量:
printf -v char '\U251C'
echo $char
├
从那里开始,经过一些头脑风暴:
string=
for i in 0 2 16 24 {12..60..8} ;do
printf -v r '\\U25%02X' $i
printf -v char "$r"
string+="$char "
done
echo "$string"
─ │ ┐ ┘ ┌ └ ├ ┤ ┬ ┴ ┼
或者
string=
for i in {80..108} ;do
printf -v r '\\U25%02X' $i
printf -v char "$r"
string+="$char "
done
echo "$string"
═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬
【讨论】: