1

我想使用命令替换来设置位置参数。这适用于一个简单的案例

$ set $(echo hello; echo world)

$ echo $1
hello

但是,如果“行”包含空格,那么它将失败

$ set $(echo hello hello; echo world world)

$ echo $1
hello

我也尝试过改变IFS价值

$ IFS=$'\n' set $(echo hello hello; echo world world)

$ echo $1
hello
4

1 回答 1

3

IFS=$'\n' set $(echo hello hello; echo world world)几乎是正确的,但并不完全正确:它运行set命令时将 IFS 设置为换行符,但这发生在$( ... )已经使用 IFS 的标准值解析的输出之后。您需要将 IFS 设置为单独的命令,然后使用该set命令,然后将 IFS 设置回:

$ saveIFS=$IFS
$ IFS=$'\n'
$ set $(echo hello hello; echo world world)
$ IFS=$saveIFS
$ echo "$1"
hello hello
echo "$2"
world world
于 2013-04-01T19:37:55.100 回答