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

Bash 使用命令替换设置位置参数,bash,parameters,Bash,Parameters,我想使用命令替换设置位置参数。这对于一个简单的情况很有效 $set$(echo hello;echo world) $echo$1 你好 但是,如果“行”包含空格,则它将失败 $set$(echo hello hello;echo world) $echo$1 你好 我还尝试更改IFS值 $IFS=$'\n'set$(echo hello hello;echo world) $echo$1 你好 IFS=$'\n'set$(echo hello hello;echo world)几乎正确,但

我想使用命令替换设置位置参数。这对于一个简单的情况很有效

$set$(echo hello;echo world)
$echo$1
你好
但是,如果“行”包含空格,则它将失败

$set$(echo hello hello;echo world)
$echo$1
你好
我还尝试更改
IFS

$IFS=$'\n'set$(echo hello hello;echo world)
$echo$1
你好
IFS=$'\n'set$(echo hello hello;echo world)
几乎正确,但不完全正确:它在IFS设置为newline的情况下运行
set
命令,但在使用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

你能用潜艇吗
(IFS=$'\n';set…)
@suspectus:Yours之所以能工作,是因为
IFS=$'\n'
后面有分号,这使得它为整个shell设置IFS,而不仅仅是为
set
命令。这个问题太棒了!我在考虑如何在没有IFS的情况下实现类似的目标。