在 bash 中使用 IFS 而不是空格

Using IFS rather than whitepace in bash

有一个非常讨厌的表达想要使用 bash 回应。

表达式为:

'one two -- 

注:--后有白色space。

所以我有:

IFS=
echo 'one$IFStwoIFS--$IFS

但结果是:

one$IFStwo$IFS--$IFS

您的方法几乎没有问题:

  1. 单引号内的变量不会在shell
  2. 中展开
  3. 在字符串 one$IFStwo$IFS--$IFS 中,$IFS 的第一个实例将不会展开,因为 $IFS 旁边有字符串 two,所以它会尝试展开 不存在的变量 $IFStwo.
  4. $IFS 的默认值为 $' \t\n'

您可以使用:

echo "one${IFS}two$IFS--$IFS"

这将扩展为(cat -A 输出):

one ^I$
two ^I$
-- ^I$