Mam skrypt w języku Python, który akceptuje argumenty łańcuchowe.
$ python script.py "one image.jpg" "another image.jpg"
Działa to zgodnie z oczekiwaniami.
Argumenty w języku Python: ["one image.jpg", "another image.jpg"]
Gdybym musiał podać nazwy plików, zrobiłbym to,
$ python script.py $(ls "/some/dir/*.jpg")
Argumenty w języku Python: ["one", "image.jpg", "another", "image.jpg"]
Jeśli użyć -Q
z ls
poleceniem, mogę owinąć wyników między cudzysłowy. Jednak cytaty pozostają znakami ucieczki w skrypcie Python, tj.
$ python script.py $(ls -Q "/some/dir/*.jpg")
Argumenty w języku Python: ['"one image.jpg"', '"another image.jpg"']
Jak rozwinąć ls
nazwy plików do odpowiednich ciągów znaków, które będą używane jako argumenty? (jak w moim pierwszym przykładzie)
command-line
bash
python
autorun
źródło
źródło
"$(ls -Q '/some/dir/*.jpg')"
. Istnieją jednak lepsze alternatywy, jak stwierdzono w odpowiedziach.Odpowiedzi:
Nie parsuj
ls
. Po prostu użyj:Wykonuje to globowanie powłoki, które zastępuje
/path/to/*.jpg
odpowiednią listą.źródło
Myślę, że odpowiedź glob powyżej jest najlepszy, ale
xargs
ifind
to również rozwiązanie, które może być wykorzystywane czasem.Działa to, ponieważ
-print0
onfind
rozdzieli dane wyjściowe bajtami zerowymi zamiast spacji, a-0
linia poleceń xargs przyjmie, że dane wejściowe są oddzielone bajtami zerowymi.źródło