Piszę skrypt powłoki, który ma działać na wielu maszynach. Niektóre z tych maszyn ma bash bash 2 lub 3. Niektóre są uruchomione BusyBox 1.18.4 gdzie bin/bash
istnieje, alePrzenośny sposób budowania argumentów dla narzędzia w powłoce?
/bin/bash --version
niczego nie wrócić wcalefoo=("hello" "world")
narzeka błąd składni w pobliżu nieoczekiwanego"("
zarówno zi bez dodatkowych spacji wewnątrz parens ... więc tablice wydają się być ograniczone lub nieobecne
Istnieją również bardziej nowoczesne lub w pełni funkcjonalne wersje Linux i bash.
Jaki jest najbardziej przenośny sposób, w jaki skrypt basha buduje argumenty w czasie wykonywania w celu wywołania narzędzia takiego jak find
? Mogę zbudować ciąg, ale uważam, że tablice będą lepszym wyborem. Wyjątkiem jest, że drugi podpunkt powyżej ...
Powiedzmy mój skrypt jest foo
i nazwać go tak: foo -o 1 .jpg .png
Oto niektóre pseudo-code
#!/bin/bash
# handle option -o here
shift $(expr $OPTIND - 1)
# build up parameters for find here
parameters=(my-diretory -type f -maxdepth 2)
if [ -n "$1" ]; then
parameters+=-iname '*$1' -print
shift
fi
while [ $# -gt 0 ]; do
parameters+=-o -iname '*$1' -print
shift
done
find <new positional parameters here> | some-while-loop
Jeśli używam 'set --' w moim skrypcie, czy to odrzuca argumenty, które zostały pierwotnie przekazane? Używam ich do budowania argumentów dla 'find' ... – user1011471
Po przekazaniu parametrów pozycyjnych są one dostępne w zmiennej' '$ @" '. Więc jeśli chcesz dodać _more_ parametry pozycyjne, musisz zrobić coś jak 'set -" $ @ "- more - more - more'. Ma sens? – kojiro
Oh. Co chciałem zrobić, to zmienić parametry pozycyjne moich skryptów w coś dla 'find', a następnie wywołać' find'. Ale tutaj '' $ @ "' jest używane zarówno dla ... – user1011471