MC, 01:31 środa, 05.09.2012 r.
Ilustracja do artykułu: Linux bash - Przyjmowanie i obsługa argumentów zawierających spacje

Linux bash - Przyjmowanie i obsługa argumentów zawierających spacje

Pisałem ostatnio dość proste skrypty w Bashu, mimo to napotkałem problem dotyczący obsługi przyjmowanych przez nie argumentów zawierających białe znaki, takie jak spacje. Okazuje się, że rozwiązanie tego problemu jest trywialne, ale w mojej ocenie warte zanotowania.

W czym problem?

Skrypty które tworzyłem miały operować na pliku, którego nazwa przekazywana była do nich jako parametr. Kiedy jednak nazwa takiego pliku zawierała spacje, skrypt zaprzestawał poprawnego działania, traktując każdy fragment nazwy z osobna. Pierwsza myśl jaka mi przyszła do głowy, to by podczas wywoływania skryptu zamknąć argument w cudzysłowach, jednak nie przyniosło to pozytywnych rezultatów. Podejście to, jest jednak bardzo bliskie prawidłowego rozwiązania!

Jak używać argumentów zawierających spacje?

Otoczyłem argument cudzysłowami podczas wywołania, a trzeba było otoczyć nimi wykorzystywaną zmienną w kodzie skryptu! Np. "$1", "$2", ... Sprawa bardzo prosta, a jednak może zrobić problem. Przykładowy skrypt, w którym nie będziemy musieli martwić się o spacje w przesyłanej nazwie pliku, może wyglądać następująco:
#!/bin/bash

iconv -f CP1250 -t UTF-8 "$1" > temp
rm "$1"
mv temp "$1"
Skrypt ten po prostu przekonwertuje nam wskazany plik tekstowy z kodowania Windows-1250 na UTF-8. Jego wywołanie może wyglądać np. tak:
sh konwertuj.sh Plik\ ktorego\ nazwa\ zawiera\ spacje.txt

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść: