Szukam do kodu wyświetlane poniżej i sprawdza dane wejściowe jeśli argumenty wiersz / kolumna zacząć albo -r
lub -c
. Co ${1:0:2}
znaczy w tym kontekście?
rowArgName="-r"
colArgName="-c"
if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ]
then
echo $correctCmdMsg >&2
exit 1
fi
bash
shell-script
użytkownik165213
źródło
źródło
bash
.getopt
czygetopts
aby ułatwić Ci życie (lub życie kogo to zrobił).Odpowiedzi:
Jest to wzorzec powłoki Substring Expansion (subclass of Parameter Expansion).
Format to:
a indeksowanie zaczyna się od 0.
Powiedzmy, że masz zmienną
foo
, a następnie${foo:0:2}
daje dwa pierwsze znaki (od pozycji 0 kolejne 2).Przykład:
W twoim przypadku pierwsza liczba
1
odnosi się do nazwy zmiennej$1
, która jest pierwszym argumentem przekazanym z wiersza poleceń (w programie głównym) lub pierwszym argumentem przekazanym do funkcji.W twoim przypadku
"${1:0:2}"
:zacznij wyodrębniać podciąg, zaczynając od indeksu 0, czyli pierwszego znaku
i przejdź do następnych dwóch znaków
więc po operacji otrzymasz dwa pierwsze znaki (indeksowane od 0 i 1) ciągu wejściowego.
[ "${1:0:2}" != $rowArgName ]
I[ "${1:0:2}" != $colArgName ]
sprawdzają, czy subtring wyjściowa jest równa niektórych innych ciągów.źródło
-c
lub-r
, które prawdopodobnie lepiej zostały zaimplementowane zgetopts
Mały wyciąg z
man bash
:źródło
Jest to prosta ekstrakcja substratu ze zmiennej. Ta zmienna jest pierwszym parametrem skryptu (którym jest
1
).Jeśli mam zmienną FOO, widzę pierwsze dwa znaki jej wartości
${FOO:0:2}
. To samo dzieje się w twoim przykładzie z pierwszym argumentem.źródło