Bash 如果输入到终端而不是复制和粘贴,命令会产生不同的结果

Bash command producing different results if typed in to terminal instead of copy and pasted

linux 的新手,通过 VirtualBox 在虚拟机 运行 Ubuntu 上练习 bash。 有一个命令来打印文本文件中每一行的第一个字符,从而产生正确的输出:

cut -f 1- -d "^M" sample.txt | cut -c 1

但是,当我从终端复制命令并使用 Ctrl+Shift+c 和 Crtl+Shift+v 粘贴回终端然后执行时,出现以下错误:

cut: the delimiter must be a single character

编辑:我通过按住 Ctrl+v 并按回车键来键入“^M”Return

编辑:没有意识到 Cut 命令无论如何都在每一行上运行,所以给出的示例中命令的第一部分是无用的,即使如此问题仍然有效。

您可以尝试使用 dos2unix 命令,而不是使用 Windows 脚本替换 Windows 文件中的 ^M,这正是该命令的作用。

我在 Linux 中知道的唯一情况是 ^M 在屏幕上键入 ctrlv接着回车是在文本编辑器里面vim或者gvim .

在那种情况下,您在文件中输入的文本实际上是一个回车 return,但在屏幕上,您看到的是两个字符 ^M。由于所见即所得并非所见即所得,因此复制和粘贴会导致不可预测的结果。

在Linux中,行之间不用回车returns分隔(十六进制代码0dctrl m),但通过换行(十六进制代码0actrlj).