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:

Kod: Markera allt

set -- arg1 "arg 2"
command "$@" fil1

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.