将字符串拆分为命令行参数

时间:2016-11-16 12:47:07

标签: shell fish

我正在尝试将用户的命令行历史记录中的sting拆分为命令行参数。例如,我想拆分

program argument escaped\ argument.txt -o 'another escaped.output'

$v[1]: program
$v[2]: argument
$v[3]: escaped argument.txt
$v[4]: -o
$v[5]: another escaped.output

我已尽力尝试每一种可能的解决方案,但由于鱼自动引用变量,我的解决方案都无法解决。

谢谢!

2 个答案:

答案 0 :(得分:4)

目前,在鱼类中没有干净的方法。

我能想到的最好的是非常黑客:

set s "program argument escaped\ argument.txt -o 'another escaped.output'"
set oldcmd (commandline)
commandline -r -- $s
set v (commandline -o)
commandline -r -- $oldcmd
printf '%s\n' $v

这会滥用fish的命令行缓冲区,它可以正确地标记其内容。

答案 1 :(得分:3)

这是您需要的地方eval

$ set s "program argument escaped\ argument.txt -o 'another escaped.output'"
$ eval set v $s
$ printf "%s\n" $v
program
argument
escaped argument.txt
-o
another escaped.output