Простой if/else не работает

Простой if/else не работает

Я смотрю на это уже час, не понимая, в чем проблема. Оператор else по какой-то причине не работает.

#!/bin/bash
if [ $#=3 ]
then
echo $*
else
echo "error" 1>&2
exit
fi

решение1

Проблема в строке:

if [ $#=3 ]

Так как вокруг нет пробелов =, то это обязательно:

if [ -n $#=3 ]

тест, который всегда будет истинным, поскольку =3всегда присутствует, следовательно, elseникогда не сработает.

Вам необходимо использовать пробелы вокруг =:

if [ $# = 3 ]

Также используйте двойные кавычки при расширении переменных, чтобы избежать разбиения слов и расширения имени пути, хотя в данном случае это не является строго обязательным $#.

Связанный контент