有没有办法在不使用变量时使用非空格分隔符进行分词?

use*_*935 5 shell bash

如果我做这样的事情:

IFS=,
x=hello,hi,world
echo $x
Run Code Online (Sandbox Code Playgroud)

然后将提取三个参数(即helloandhiworld),并将这三个参数传递给echo

但是当我不使用变量时:

IFS=,
echo hello,hi,world bye
Run Code Online (Sandbox Code Playgroud)

然后将使用空格分隔符而不是逗号分隔符进行分词,因此生成并传递给的两个参数echo将是hello,hi,worldand bye

有没有办法在不使用变量时使用非空格分隔符进行分词?

ilk*_*chu 5

不,分词只发生在扩展之后,而不是直接在命令行上给出的东西(在现代 shell 上)。POSIX 中文字说:

2.6.5 字段拆分
在参数扩展(Parameter Expansion)、命令替换(Command Substitution)和算术扩展(Arithmetic Expansion)之后,shell 会扫描双引号中没有出现的扩展和替换的结果进行字段拆分和可以产生多个字段。

(强调我的)

Bash

shell 扫描没有出现在双引号内的参数扩展、命令替换和算术扩展的结果以进行分词。

我不确定这有什么大问题,因为如果字符串直接在脚本中,您可以用空格替换逗号。如果它来自外部,那么拆分通常会自然发生,在命令替换中或在使用read等时。


在原来的Bourne shell的行为是有点不同,@斯特凡Chazelas 讨论了这个在回答另一个问题而回