bash 和 find 中的 \ 是什么意思?

Mar*_*cus 6 bash find syntax

我知道这\是一个转义字符,但是当我\在 bash 中编写时,我有这样的东西:

System-Product-Name:~$ \
> 
Run Code Online (Sandbox Code Playgroud)

那么 bash 会等待一些指令吗?当我使用

System-Product-Name:~$ \
> ls
Run Code Online (Sandbox Code Playgroud)

这是工作。但是当我使用

System-Product-Name:~$ cd Wideo \
> ls
bash: cd: too many arguments
Run Code Online (Sandbox Code Playgroud)

那么反斜杠就像管道一样工作吗|?我不这么认为。

当我使用这个命令时:

find . -name "FILENAME"  -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)

为什么我需要终止它?我认为该命令find找到了正确的文件,并将exec它们从找到它们的路径中删除。如果没有这个,我所得到的信息就-exec没有任何论据,我就无法理解。为什么我不能只使用

find . -name "FILENAME"  -exec rm {}
Run Code Online (Sandbox Code Playgroud)

我只有有关 man find 中 exec 的信息:

exec 显示与 -exec、-execdir、-ok 和 -okdir 相关的诊断信息

那么为什么我在使用 exec 时需要终止呢?例如当我使用

find . -name "FILENAME"
Run Code Online (Sandbox Code Playgroud)

我不需要终止。

Fré*_*yer 15

您应该区分行\末尾的 ,这意味着“这不是行的末尾,该行继续下一行”(那么您的cd命令有 2 个参数,太多了),而\行内部则阻止下一个字符具有特殊含义。

然后,\;在您的示例中,意味着给出find一个文字;作为参数。如果没有\,则;将对 shell 具有特殊含义,并将用作find命令和下一个命令之间的分隔符。

当您与选项一起;使用时,需要使用该参数,以便知道with 给出的命令在哪里结束。另一种选择是两个参数和。您应该阅读手册以获取更多信息。find-execfind-exec{}+find(1)

  • 可以说,行尾的反斜杠与行内的反斜杠具有完全相同的含义,它们都删除了下一个字符(分别是换行符和“;”字符)的特殊含义。这两种情况不需要彼此分开或区分。 (18认同)
  • @Kusalananda,是的,反斜杠删除了以下字符的特殊含义,就像引号一样。但是,如果后面的字符是换行符,_它会删除整个字符_,而不是像引号那样将其保留为文字,也像反斜杠对其他特殊字符所做的那样。例如 `echo :<backslash><newline>:<newline>` 打印连续的冒号,而 `echo :"<newline>":<newline>` 打印两个冒号,中间有一个换行符。 (8认同)
  • 如果您输入“echo a\<newline>b”,则换行符将被抑制,而不是回显不变。与其他字符之前的 \ 不同。我认为解释2个案例会比解释1个更好。 (7认同)
  • @Kusalananda,比较反斜杠换行符与引号换行符和反斜杠分号与引号分号引号(此处使用双引号或单引号) (2认同)
  • @Kusalananda,不,他们和我都不同意你的观点,换行符前面的反斜杠会删除换行符,而对于任何其他字符,它是一个引用运算符“\;”,就像“;”或“”; "`, `\<newline>` 与 `'<newline>'` 不同。因此,说它具有完全相同的含义是一种误导,就像说反斜杠在将“\n”更改为fish或es中的换行符时删除了“n”的特殊含义一样。另请注意,双引号内或带有不带引号的分隔符(其中换行符没有特殊含义)或算术表达式的文档中的“\<newline>”也会被删除。 (2认同)