为什么粘贴 Bash 函数会导致“显示所有可能性”并出现一个长列表?

it_*_*ure 1 bash ifs

内部字段分隔符(缩写为 IFS)是指一个变量,它定义用于将模式分隔为某些操作的标记的一个或多个字符。IFS 通常包括空格、制表符和换行符。

显示我当前的 IFS:

echo -n "$IFS" |xxd
00000000: 2009 0a 
Run Code Online (Sandbox Code Playgroud)

现在我写了一个简单的 bash 脚本。

在此处输入图片说明

整个代码位于我的dropbox 中

当我将其粘贴到控制台时:

在此处输入图片说明

在第 2 行开始到第 5 行,它是\t; 如果我用空白替换它,它可以被复制到控制台并且没有任何反应。

所以我们可以得出结论,这\t导致了这个动作。我想知道,如果变量$1从未被分配过,粘贴到控制台时代码是如何运行的?

我已经IFS多次阅读这个概念,但找不到解释。

Ben*_* W. 5

这是因为当你粘贴某些东西时,行为就像你从字面上输入一样;因为您使用制表符进行缩进,所以粘贴会触发自动完成。

有一个readline 设置可以避免这种情况:

set enable-bracketed-paste on
Run Code Online (Sandbox Code Playgroud)

这进入您的.inputrc.

从手册:

当设置为 时On,Readline 将以某种方式配置终端,使其能够将每个粘贴作为单个字符串插入编辑缓冲区,而不是将每个字符视为从键盘读取。这可以防止粘贴的字符被解释为编辑命令。默认值为off.