答案关于这个问题 https://stackoverflow.com/q/69068/3705191声明可以通过使用插入符将长命令分成多行(^
)。一个答案提供了技术描述:
插入符号 and 换行符其后的被删除完全来自命令
然而,这似乎并不总是有效piping命令并使用管道符号 (|
).
看看下面的例子:
要拆分的代码:
dir | sort
❌ 不起作用
dir ^
| sort
✅ 有效 #1
dir ^
| sort
Notice the space in 2nd line
✅ 作品 #2
dir |^
sort
很想知道为什么会出现这种情况:)
As 这个答案 https://stackoverflow.com/a/4455750/3705191有点神秘地指出了插入符号 (^
)的工作原理如下:
行尾有插入符号:
- 删除后面的换行符(例如将 2 行变成 1 行)
-
escapes下一行的第一个字符
- 删除插入符号 (
^
)你输入
由于管道符号|
is the first下一行的字符,它将是escaped从而失去其特殊含义,仅被解释为文本字符。
例子:
dir ^
/B
变成:
dir ^/B
The ^
字符是转义字符。正斜杠/
没有特殊含义,因此转义它没有任何效果,使命令按预期工作并有效地将其变成这样:
dir /B
然而,看看这个:
dir ^
& echo hello
变成:
dir ^& echo hello
Which escapes特别的&
字符(具有执行正确命令的特殊含义after左边那个)。你会得到一个错误,因为所有& echo hello
将作为参数发送到dir
命令。
这意味着像这样的事情will work:
dir ^
& & echo hello
变成:
dir ^& & echo hello
首先&
被逃脱,而第二个&
被正确解释。这将运行dir ^&
,发送&
(原始文本字符)作为目录参数dir
, and then run echo hello
因为第二个&
角色正常工作。dir ^&
会失败,因为“&”不是有效的目录,然后echo hello
将打印出“你好”。
回到piping,让我们看一下您提供的不起作用的示例:
dir ^
| sort
变成:
dir ^| sort
管道符号|
将会被逃脱并且not被解释为管道(它将显示为文本字符)。因此,“| sort”将作为参数发送到dir
命令,它将找不到该目录,并且失败。
要解决这个问题,正如您已经想到的,您需要添加一个空格在下一行的开头。
这样,space将被转义,而后续的管道符号|
将被解释为正常:
dir ^
| sort
变成:
dir ^ | sort
这实际上是:
dir | sort
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)