我想使用命令替换来设置位置参数。这适用于简单的情况
$ 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
答案 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