2009-10-08 18 views

Odpowiedz

153

Użyj shift wbudowane polecenie, aby "jeść" argumentów. Następnie wywołaj proces potomny i przekaż go argumentowi "[email protected]", aby uwzględnić wszystkie pozostałe argumenty. Zwróć uwagę na cytaty, powinny one być przechowywane, ponieważ powodują, że rozszerzenie listy argumentów jest prawidłowo cytowane.

+18

faktycznie "$ @" jest bezpieczniejsze niż $ * – pixelbeat

+4

Jaka jest różnica? –

+1

@pixelbeat: Dzięki, dobry połów. Edytowałem. @ Łukasz Lew: zobacz stronę z linkami do podręcznika. :) Zasadniczo obsługuje cytowanie lepiej. – unwind

18

atakujących wykorzystuje przesunięcia polecenie:

np shifttest.sh:

#!/bin/bash 
echo $1 
shift 
echo $1 $2 

shifttest.sh 1 2 3 produkuje

1 
2 3 
7

bash obsługuje parametry podzbiorów (patrz Subsets and substrings), dzięki czemu można wybrać, które parametry do procesu/pass tak:

otwarty nowy plik i go edytować: Vim r.sh

echo "params only 2 : ${@:2:1}" 
echo "params 2 and 3 : ${@:2:2}" 
echo "params all from 2: ${@:2:99}" 

go uruchomić :

chmod u+x r.sh 
./r.sh 1 2 3 4 5 6 7 8 9 10 

wynik jest:

params only 2 : 2 
params 2 and 3 : 2 3 
params all from 2: 2 3 4 5 6 7 8 9 10 
Powiązane problemy