2016-11-16 37 views
2

我想將用戶的命令行歷史記錄中的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 

我已經嘗試每一個可能的解決方案,我可以,但魚自動引用變量,沒有我的解決方案的工作。

謝謝!

+0

你想存儲到'bash'數組? – Inian

+0

@Inian成魚(https://fishshell.com/)數組。 – boramalper

+0

「魚自動引用變量」 - 呃,不。它只是不分裂它。 – faho

回答

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 

這種濫用魚的命令行緩衝區,並適當令牌化的內容。

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 
+1

請注意,這個_will_會在參數中運行任何命令替換和類似操作,並且沒有簡單的方法。 – faho