在 backstick 内执行的命令输出的字母“A,a”正在被空白替换,为什么?

Far*_*had 1 bash

这是我的 shell 中缺少“a”字符的快照!!我正在运行 ubuntu 16.04

我的外壳的快照

Sco*_*ott 5

如果您的IFS变量中有一个a,就会发生这种情况。尝试以下命令:

$ echo "$IFS" # 注意:引号很重要。
                # 我猜输出将是“a”,或者包含“a”的东西。
$ pwd # 我希望这会奏效。

$ echo "`pwd`" # 同样,引号很重要。
                # 我希望这也能给出正确的输出。

IFS是壳的名单nternal ˚F ield小号eparators。在$IFS对不带引号的参数扩展和命令替换进行分词时,出现在中的任何字符都将被视为空格。

没有充分的理由让您的IFS变量进入a其中;即,如果这就是发生的事情,我不知道为什么会发生。如果您启动一个新的命令窗口(即,xterm或您使用的任何窗口)并且问题消失了,那么它可能已本地化到您当前的命令窗口,并且可能不会再出现。但是,如果一个新的命令窗口有同样的问题,那么你应该寻找你的~/.*文件(即~/.bashrc~/.bash_profile~/.profile,等),上面写着一个命令。IFS=something

  • `IFS=` 将用作创可贴。它会导致 shell *not* 将未加引号的参数扩展和命令替换拆分为单词,但是,OTTOMH,我不明白为什么这会是一个大问题。更好的创可贴是 `unset IFS`,它用一个项目符号使 `IFS` 为空,并导致 shell 使用默认值——空格、制表符、换行符。要将其恢复为正确/默认值,请键入`IFS='(space)(Tab)(Enter)'`(然后像往常一样再次输入)。根据您的配置,您可能需要在 Tab 之前键入 Ctrl+V 以使 Tab 被接受为纯字符。……(续) (2认同)
  • (续)……到目前为止我所说的一切都适用于任何符合 POSIX 的 shell。有一个稍微简单的 bash-only 命令:`IFS=$' \t\n'`(然后像往常一样输入)。请注意,第一个 **`'`** 前面是一个 `$`,后跟一个空格。 (2认同)