内部字段分隔符(缩写为 IFS)是指一个变量,它定义用于将模式分隔为某些操作的标记的一个或多个字符。IFS 通常包括空格、制表符和换行符。
显示我当前的 IFS:
echo -n "$IFS" |xxd
00000000: 2009 0a
Run Code Online (Sandbox Code Playgroud)
现在我写了一个简单的 bash 脚本。
整个代码位于我的dropbox 中。
当我将其粘贴到控制台时:
在第 2 行开始到第 5 行,它是\t; 如果我用空白替换它,它可以被复制到控制台并且没有任何反应。
所以我们可以得出结论,这\t导致了这个动作。我想知道,如果变量$1从未被分配过,粘贴到控制台时代码是如何运行的?
我已经IFS多次阅读这个概念,但找不到解释。
这是因为当你粘贴某些东西时,行为就像你从字面上输入一样;因为您使用制表符进行缩进,所以粘贴会触发自动完成。
有一个readline 设置可以避免这种情况:
set enable-bracketed-paste on
Run Code Online (Sandbox Code Playgroud)
这进入您的.inputrc.
从手册:
当设置为 时
On,Readline 将以某种方式配置终端,使其能够将每个粘贴作为单个字符串插入编辑缓冲区,而不是将每个字符视为从键盘读取。这可以防止粘贴的字符被解释为编辑命令。默认值为off.