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:
Run Code Online (Sandbox Code Playgroud)-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
因此,^I上述输出的序列表示一个 TAB 字符,另外两个$字符表示行尾。