如何查看IFS的当前值?

Com*_*erd 10 command-line bash

我目前正在运行一个shell脚本,我怀疑可能是问题,因为我不小心改变了默认值IFS这是一个空间到别的东西。

我想检查 IFS 的当前值,但我不知道如何找到它。

我在 VMWare 上运行我的 Ubuntu。

Bry*_*nta 17

> printf %q "$IFS"
' \t\n'
Run Code Online (Sandbox Code Playgroud)

%q格式参数用于内插引用变量$IFS和逃逸控制将由所述壳解释的字符。

在这里您可以看到 IFS 在空格、制表符和换行符上分隔。


Rad*_*anu 10

正如你可能已经知道,默认值IFS<space><tab><newline>。使用:

echo "$IFS"
Run Code Online (Sandbox Code Playgroud)

您可能会推断出有一个换行符和一些其他空白字符,但不确定。

为了确定IFS变量的确切值,您可以求助于cat命令的帮助如下:

echo "$IFS" | cat -ETv
Run Code Online (Sandbox Code Playgroud)

这相当于:

cat -ETv <<< "$IFS"
Run Code Online (Sandbox Code Playgroud)

默认值的示例输出IFS

cat -ETv <<< "$IFS"
 ^I$
$
Run Code Online (Sandbox Code Playgroud)

从前面的输出中,您可以推断出开头肯定有一个空格字符和一个换行符。但其他奇怪的字符是什么。让我们来看看man cat

   -E, --show-ends
          display $ at end of each line

   -T, --show-tabs
          display TAB characters as ^I

   -v, --show-nonprinting
          use ^ and M- notation, except for LFD (n.a. linefeed or newline character) and TAB
Run Code Online (Sandbox Code Playgroud)

因此,^I上述输出的序列表示一个 TAB 字符,另外两个$字符表示行尾。