使用命令替换设置位置参数

时间:2013-04-01 18:58:58

标签: bash parameters

我想使用命令替换来设置位置参数。这适用于简单的情况

$ 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

1 个答案:

答案 0 :(得分: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