-bash: синтаксическая ошибка около неожиданного токена `;'

-bash: синтаксическая ошибка около неожиданного токена `;'

Какой правильный формат для if then?
Я пробовал много вариантов.
Должен ли формат работать в командной строке, когда он не в программе?

$ if [1==2] then echo "y" fi;
> ;
-bash: syntax error near unexpected token `;'

решение1

Никто пока не объяснил ошибку.

Вы вошли:

if [1==2] then echo "y" fi;
;

Первая строка имела абсолютно допустимый синтаксис с точки зрения оболочки. Она имела вид:

if cmd args

В этом случае cmdявляется производным от расширения glob [1==2]. [1==2]— это шаблон глобализации, который расширяется до списка файлов в текущем каталоге, имена которых состоят из символа 1, =или 2.

2Например, если в текущем каталоге есть файл , то это будет выглядеть так:

если 2, то эхо fi;

То есть выполнить 2команду с 4 аргументами: 2, then, echoи fi, как первую команду в ifчасти оператора if/then/elif/else/fi.

Ошибка возникает из-за этого второго ;во второй строке. Вы бы получили то же самое сообщение об ошибке, введя его ;в командной строке. ;необходимо использовать для разделения команд, его нельзя использовать отдельно.

решение2

Правильная форма конструкции bash if:

if something; then command; fi

Правильная форма того, что вы, кажется, пытаетесь сделать, это

if [ 2 -eq 2 ]; then echo "y"; fi;

Пробелы важны в bash.

решение3

Попробуй это:

if [ 1 == 2 ]; then echo "y" ; fi

И лучше использовать -eq, если вы не хотите сравнивать 1 и 2 как строки.

Полезная ссылка:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

решение4

Оператора ==нет в Bash. Он есть либо -eqпри сравнении чисел, либо =при сравнении строк.

if [ 1 -eq 2 ]; then echo 'y'; fi

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