elif [ "$cont" == "1"" ]; then
недействителен; котировки всегда должны прийти в парах:
elif [ "$cont" == "1" ]; then
, что дает:
if [ "1" == "1" && "$cont" == "1" ]; then
echo "I am if"
elif [ "$cont" == "1" ]; then
echo "I am else"
fi
, который терпит неудачу с bash: [: missing ']'
Причиной является первой линией. Вы используете одного [
что означает BASH видит:
if [ "1" == "1"
pipe (&&)
"$cont" == "1" ]; then
Попробуйте
if [[ "1" == "1" && "$cont" == "1" ]]; then
echo "I am if"
elif [[ "$cont" == "1" ]]; then
echo "I am else"
fi
Сингла [
является старой ошибкой функцией от Bourne времен оболочки. Они создают всевозможные проблемы, которые были решены с помощью синтаксиса [[...]]
.
Если вы не знаете, что делаете, избегайте одиночных [
и синтаксиса backtick (вместо этого используйте $(cmd...)
).
Совет. Чтобы отладить такие вещи, используйте set -x
, чтобы оболочка печатала каждую команду, когда она ее видит.
У вас есть опечатка. 'elif [" $ cont "==" 1 ""], затем 'One 'too many – RedX
Является ли двойная двойная кавычка после 1 в состоянии elif там специально? –
Хотя я меняю его, -bash: [: missing '] ' – logan