Argument med mellanslag i en variabel

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

Argument med mellanslag i en variabel

Inlägg 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.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Argument med mellanslag i en variabel

Inlägg 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
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

Re: Argument med mellanslag i en variabel

Inlägg av Lars »

Aha, tack så mycket :)
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Argument med mellanslag i en variabel

Inlägg 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.
Skriv svar

Återgå till "Terminalforum"