Chcę, aby mój skrypt mógł pobierać opcjonalne dane wejściowe,
np. obecnie mój skrypt to
#!/bin/bash
somecommand foo
ale chciałbym powiedzieć:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
Chcę, aby mój skrypt mógł pobierać opcjonalne dane wejściowe,
np. obecnie mój skrypt to
#!/bin/bash
somecommand foo
ale chciałbym powiedzieć:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
Odpowiedzi:
Możesz użyć składni wartości domyślnej:
Powyższe będzie, jak opisano w Bash Reference Manual - 3.5.3 Rozbudowa parametru powłoki [moje podkreślenie]:
Jeśli chcesz zastąpić wartość domyślną tylko wtedy, gdy parametr jest nieustawiony (ale nie jeśli jest pusty, np. Jeśli nie jest pustym ciągiem), użyj następującej składni:
Ponownie z podręcznika użytkownika Bash - 3.5.3 Rozszerzenie parametru powłoki :
źródło
foo
if$1
is unset or a empty string ”, a${1-foo}
„returnfoo
jeśli nie$1
jest ustawiony”.Możesz ustawić wartość domyślną dla zmiennej takiej jak:
somecommand.sh
Oto kilka przykładów tego, jak to działa:
źródło
-
Mylić mnie (to jest negowane?).źródło
-n
jest taki sam jak! -z
.-n
a! -z
więc chciałbym powiedzieć, że nie jest w tym przypadku.[ -n $1 ]
zawsze będzie to prawda . Jeśli użyjesz bash,[[ -n $1 ]]
zachowa się tak, jak się spodziewasz, w przeciwnym razie musisz zacytować[ -n "$1" ]
Możesz sprawdzić liczbę argumentów za pomocą
$#
źródło
nie zapomnij, jeśli jego zmienna $ 1 .. $ n musisz zapisać do zmiennej zwykłej, aby użyć podstawienia
źródło
DAY=${1:-$(date +%F -d "yesterday")}
W przypadku opcjonalnych wielu argumentów, analogicznie do
ls
polecenia, które może pobrać jeden lub więcej plików lub domyślnie wyświetla listę wszystkich elementów w bieżącym katalogu:Niestety, nie działa poprawnie dla plików ze spacjami w ścieżce. Nie wymyśliłem jeszcze, jak to zrobić.
źródło
Umożliwia to domyślną wartość dla opcjonalnego pierwszego argumentu i zachowuje wiele argumentów.
źródło
Możliwe jest użycie podstawienia zmiennej w celu podstawienia stałej wartości lub polecenia (podobnego
date
) dla argumentu. Odpowiedzi do tej pory koncentrowały się na ustalonych wartościach, ale tego użyłem, aby data była opcjonalnym argumentem:źródło