shell - 如何在 KornShell (ksh) 中正确保存 IFS

标签 shell unix ksh aix ifs

我正在尝试在 KornShell (ksh) 脚本中修改 IFS 之前保存它。我发现备份变量没有被正确保存,所以我写了一个简单的脚本来重现这个问题。

#!/usr/bin/ksh

OFIS=$IFS
echo "$IFS" | od -b
echo "$OIFS" | od -b

我希望在回显 OIFS 时看到的内容与回显 IFS 时看到的相同,IFS 是空格 (040)、制表符 (011) 和换行符 (012) 的八进制 ascii 值。但是,这是输出:
0000000  040 011 012 012
0000004
0000000  012
0000001

请注意,IFS 变量的输出包含所有三个字符,而 OIFS 的输出仅包含一个换行符 (012)。我看过的每个论坛都表明这是创建 IFS 副本的方法。有谁知道为什么 OIFS 没有正确设置?我也尝试将 $IFS 像这样用双引号括起来,但得到了相同的结果:
#!/usr/bin/ksh

OFIS="$IFS"
echo "$IFS" | od -b
echo "$OIFS" | od -b
0000000  040 011 012 012
0000004
0000000  012
0000001

我在 AIX6 上运行。

最佳答案

赋值并不严格要求引用:

foo="  lots   of    spaces   "
bar=$foo
echo ">$bar<"
>  lots   of    spaces   <

当然,使用变量时通常需要引号。

关于shell - 如何在 KornShell (ksh) 中正确保存 IFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19119644/

相关文章:

linux - 为什么当我通过 shell 脚本创建 .txt 文件时,问号出现在文件名的末尾?

sql - oracle 行计数到 shell 脚本变量

powershell - 如何使用PowerShell参数

linux - 检查 Unix/Linux 的文件完整性

linux - 在远程服务器 linux 上复制/移动文件

linux - 使用 cat 输出运行 bash 脚本的问题(额外引号)

c++ - 使用 unix 终端运行 c++ 程序

c - C 中的 block 中的 read() 和 write() 非文本文件

unix - Awk 和多文件处理可能吗?

linux - for 循环范围不工作 ksh