Czy można to zrobić ładniej (powtórz symbol zastępczy dla innego polecenia)
echo $(for x in *;do echo $x|sed 's/\([ \t\n\r\v\f\;#]\)/\^\1/g'|sed 's/$/\;/g';done)
Ponadto nie powinno być; po ostatniej nazwie pliku.
przykładowe użycie polecenia „doit” to
doit files[ list-of-files ] 'flags[foo;bar;other^ flag]options[value^ 1[1]value^ array[1;2;3]]'
itp.
Możliwe jest wewnętrzne opuszczanie białych znaków (w doit), ponieważ nie wpływa to na tokenizer doits (po prostu zjada każdą białą spację, która nie następuje ^). Oprócz dobrej rozszerzalności składni kod do odczytu plików konfiguracyjnych i wiersz poleceń są takie same.
Sed działa, oczekując, że doda; za dużo na końcu. Jednak logika dodawania; wewnątrz doit nie jest trudne do wdrożenia, więc ten ostatni krok nie jest konieczny. Nie podoba mi się to, że potrzebuję pętli, aby uciec przed każdym argumentem osobno. Po prostu echo * | sed ... nie zrobiłby tego, ponieważ echo niszczy informacje (wypisuje wszystko ograniczone przez białe znaki).
Podobny problem: chcę dodać echo ~ / my_progs / * dwukropek oddzielony do zmiennej ścieżki.
doit
wymagany przez tę magię . A może twoje polecenie działa już idealnie i szukasz czegoś „ładniejszego”, ponieważ…?
doit
aby odpowiedzieć.
;
prostu usunąć ostatnią sed
komendę: sed 's/$/\;/g'
. Wyraźnie mówisz, aby dodać ;
na końcu. Prawdopodobnie istnieje na to lepszy sposób, ale nie możemy go znaleźć, chyba że podasz nam konkretne przykłady. Zależy od Ciebie.