Sida 1 av 1
Argument med mellanslag i en variabel
Postat: 10 apr 2008, 23:12
av Lars
Om man har ett skript som anropar ett program flera gånger med snarlika argument kan man ju göra så här:
Kod: Markera allt
ARGS="arg1 arg2"
command $ARGS fil1
command $ARGS fil2
Men hur gör man om t.ex. arg2 ska innehålla ett mellanslag? Jag har testat alla möjliga kombinationer av ', " och \, men jag får inte till det.
Re: Argument med mellanslag i en variabel
Postat: 11 apr 2008, 00:38
av Konservburk
Du kan inte escapa dig ur det där med all fnuttologi i världen. När du väl har lagt in något i varibalen ARGS så ligger det där som en sträng där alla mellanrum är lika oavsett fnuttar. Du kan såklart få till det hela med en
eval om du vill, men jag skulle nog snarare lösa det så här istället:
Kod: Markera allt
ARGS=(arg1 "arg 2")
command "${ARGS[@]}" fil1
Eller om jag vill vara portabel med /bin/sh:
Re: Argument med mellanslag i en variabel
Postat: 11 apr 2008, 00:56
av Lars
Aha, tack så mycket

Re: Argument med mellanslag i en variabel
Postat: 11 apr 2008, 01:32
av Konservburk
Kom just på att man även kan lösa det genom att byta skiljetecken till t.ex. komma:
Kod: Markera allt
_IFS="$IFS"
IFS=,
ARGS="arg1,arg 2"
command $ARGS fil1
IFS="$_IFS"
Och om någon undrar så blir
eval-lösning så här:
Kod: Markera allt
ARGS="arg1 'arg 2'"
eval command $ARGS fil1
Var dock noga med att se till så att varken
command eller
fil1 innehåller något som
eval ändrar på. Annars kan det gå illa.