Jestem w stanie uzyskać odpowiedź w wierszu polecenia, jeśli po prostu użyć warunku IF sam. Ale jeśli dodasz elif, wiersz polecenia jest nadal otwarty i nie kończy się ...
Kod użyłem ...
-bash-3.00$ if [ "1" == "1" && "$cont" == "1" ]; then
> echo "I am if"
> elif [ "$cont" == "1"" ]; then
> echo "I am else"
> fi
>
>
Oczekiwany wynik : Powinno to zakończyć się i powrócić echo;
Odpowiedzi:
3 dla odpowiedzi № 1Możesz zmienić &&
do -a
:
$ cont=1
$ if [ "1" = "1" -a "$cont" = "1" ]; then echo "ha"; fi
ha
Lub użyj dwóch oddzielnych [
polecenia:
$ if [ "1" = "1" ] && [ "$cont" = "1" ]; then echo "ha"; fi
Lub użyj podwójnych nawiasów:
$ if [[ "1" == "1" && "$cont" == "1" ]]; then echo "ha"; fi
ha
Zwróć też uwagę na "
zbyt wiele masz w swoim elifie, jak RedX komentarze.
2 dla odpowiedzi nr 2
elif [ "$cont" == "1"" ]; then
nie jest ważny, cytaty zawsze muszą być parami:
elif [ "$cont" == "1" ]; then
to daje:
if [ "1" == "1" && "$cont" == "1" ]; then
echo "I am if"
elif [ "$cont" == "1" ]; then
echo "I am else"
fi
który zawodzi bash: [: missing "]"
Powodem jest pierwsza linia. Używasz singla [
co oznacza, że BASH widzi:
if [ "1" == "1"
pipe (&&)
"$cont" == "1" ]; then
Próbować
if [[ "1" == "1" && "$cont" == "1" ]]; then
echo "I am if"
elif [[ "$cont" == "1" ]]; then
echo "I am else"
fi
Pojedynczy [
są stare pluskwafunkcja z czasów powłoki Bourne'a. Wytwarzają wszelkiego rodzaju problemy, które zostały rozwiązane za pomocą [[...]]
składnia.
Jeśli nie wiesz, co robisz, unikaj singli [
i składnia zwrotna (use $(cmd...)
zamiast).
Wskazówka: Aby debugować takie rzeczy, użyj set -x
aby powłoka drukowała każde polecenie, tak jak je widzi.