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手册页以了解单引号和双引号之间的行为差异。