Bash错误-剪切:分隔符必须是单个字符(尝试使用“/”)

Bash错误-剪切:分隔符必须是单个字符(尝试使用“/”),bash,delimiter,Bash,Delimiter,我试图使用正斜杠作为分隔符,但出现错误: 剪切:分隔符必须是单个字符 这是我的命令: cat index.html |grep “href=“ |cut -d”/“ -f3 |more 我怀疑您在那里粘贴了高ascii(花式unicode)双引号 比较: $ echo cut -d”/“ | hexdump -C 00000000 63 75 74 20 2d 64 e2 80 9d 2f e2 80 9c 0a |cut -d.../....| 0000000e $ ec

我试图使用正斜杠作为分隔符,但出现错误:

剪切:分隔符必须是单个字符

这是我的命令:

cat index.html |grep “href=“ |cut -d”/“ -f3 |more

我怀疑您在那里粘贴了高ascii(花式unicode)双引号

比较:

$ echo cut -d”/“ | hexdump -C
00000000  63 75 74 20 2d 64 e2 80  9d 2f e2 80 9c 0a        |cut -d.../....|
0000000e

$ echo cut -d"/" | hexdump -C
00000000  63 75 74 20 2d 64 2f 0a                           |cut -d/.|
00000008
2f
是(正)斜杠,这是
cut
要查看其
-d
参数的全部内容。注意,在第二个表达式中,bash根本不向命令发送实际的双引号,这是您的目标

e280 9d 2f e280 9c
e280 9d
+
2f
+
e280 9c
<代码>e2 80 9d(
11100010 10000000 10011101
二进制)用于
U+201d
e2 80 9c
用于
U+201c
,分别为和。有趣的是,粘贴导致它们“由内而外”——即//x\\n而不是\\x//

bash去掉的低位ascii双引号是
22
(十六进制,或十进制中的34),用unicode的说法是
U+0022
()


我强烈建议您阅读Bash手册页面的“引用”部分(
manbash
并搜索引用(键入
/QUOTING
+Enter),然后使用上下箭头键滚动,并
q
退出)

注意,在第二个hextdump中,命令解释器将删除双引号。要演示,请尝试:
用于63 75 74 20 2d 64 2f 0a中的n;不打印“\x$n”;完成;回声
。(您可能已经知道这一点,但其他读者可能不知道。)bash单词中不需要引用
html=
/
。所以你可以删除引号,或者修复它们。在secons xase中,我建议使用单引号。但是如果您正在引用,请阅读bash手册页以了解单引号和双引号之间的行为差异。