有没有办法使用bash或perl脚本打印ASCII字符'├──'和'└──'? 我希望它与'tree'的输出完全一样。
[root@localhost www]# tree -L 1
.
├── cgi-bin
├── error
├── html
└── icons
答案 0 :(得分:3)
它们看起来是扩展的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}"'
答案 1 :(得分:2)
echo -e "\0342\0224\0224\0342\0224\0200\0342\0224\0200 \033[01"
答案 2 :(得分:2)
这里有超过 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 值,您就可以使用 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"
═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬