【问题标题】:How to properly save IFS in KornShell (ksh)如何在 KornShell (ksh) 中正确保存 IFS
【发布时间】:2013-10-07 19:36:32
【问题描述】:

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

#!/usr/bin/ksh

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

当我回显 OIFS 时,我期望看到的内容与回显 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 上运行。

【问题讨论】:

  • 你会踢自己的:OFIS != OIFS
  • 我希望我足够灵活,可以踢自己的头,但我想把它撞到墙上就足够了。谢谢:)
  • +1 用于易于理解的测试用例。错字太糟糕了;-)祝大家好运。

标签: shell unix ksh aix ifs


【解决方案1】:

作业并不严格要求引用:

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

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

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 2011-05-31
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2016-12-02
    • 2011-12-11
    相关资源
    最近更新 更多