Niels Andersen wrote:
> Jeg sidder og bakser med et bash-script, som ikke vil helt som jeg vil,
> når der er mellemrum i filnavnene.
sh, som bash bygger på, blev lavet dengang, da mellemrum ikke var tilladt
i filnavne. Man har så klampret noget på, der kan håndtere det - for det
meste
Men generelt virker det ikke særligt godt og er urimeligt kompliceret -
læs f.eks afsnittet om quoting i man bash.
> Lad os sige, at der rent faktisk er en fil, der hedder "filnavn med
> mellemrum".
>
> TEST="filnavn\ med\ mellemrum"
> echo less $TEST
> less $TEST
Generelt skal du _altid_ putte dine variable i citationstegn. Altså
skrive
less "$TEST"
Det gælder ikke bare mht filnavne men også hvis dine variable rummer
options o.lign. De fleste gange går det godt, men så snart der kommer
en blank (eller en tom streng) skal du have citationstegn på.
Almindelig dovenskab plus en konvention om, at man /som regel/ ikke
har blanke i filnavne, gør at du for det meste kan slippe godt fra
ikke at have citationstegn omkring ekspansioner af variable.
Når dit problem er, at du vil have variablen til at rumme flere filnavne
er det game-over - det kan bash simpelthen ikke klare med almindelige
variable. Ikke i alle situationer i hvert fald.
I stedet kan du bruge arrays:
navne=(Hej\ med\ dig du\ gamle)
for navn in "${navne
}"
do echo $navn
done
Det virker, men det er en noget tung syntax...
-Claus