Mám analyzovať argument príkazového riadku v shellovom skripte takto:
cmd --a=hello world good bye --b=this is bash script
Potrebujem analyzovať argumenty "a" napríklad "ahoj svet ...", ktoré sú oddelené medzerou do poľa.
tj pole a_input () by mala obsahovať "hello", "world", "good" a "bye".
Podobne aj pre argumenty "b".
Snažil som sa to takto:
--a=*)
a_input={1:4}
a_input=$@
for var in $a_input
#keep parsing until next --b or other argument is seen
done
Ale vyššie uvedená metóda je hrubá. Akékoľvek iné práce okolo. Nemôžem použiť getopty.
odpovede:
1 pre odpoveď č. 1Najjednoduchším riešením je prinútiť používateľov, aby správne citovali argumenty.
Zablokovanie toho, že môžete manuálne smyčať, až kým nedosiahnete koniec argumentov alebo stlačíte nasledujúci --argument
(ale to znamená, že nemôžete obsahovať slovo, ktoré začína --
vo vašej argumentovej hodnote ... pokiaľ nevykonáte aj platnú možnosť testovania na tých, v ktorých obmedzíte o niečo menej --
Slová).
0 pre odpoveď č. 2
Pridanie k odpovedi spoločnosti Etan Reisners, čo je absolútne správne:
Ja osobne nájdem bash trochu ťažkopádny, kedyspracovanie array / string je zložitejšie a ak máte naozaj podivnú požiadavku, aby volajúci nebol povinný používať úvodzovky, napísal by som tu sprostredkujúci skript, napríklad Ruby alebo Perl, ktorý práve zhromažďuje parametre v správny spôsob, obklopuje okolo nich obálky a odovzdáva ich do scenára, ktorý sa mal pôvodne nazývať - aj keď to stojí ďalší proces.
Napríklad Ruby One-Liner ako napr
system("your_bash_script here.sh "".(ARGV.join(" ").split(" --").select {|s| s.size>0 }.join("" "")).""")
by to urobilo dezinfekciu a potom sa obráťte na svoj skript.