синтаксическая ошибка простого сценария оболочки: [: отсутствует ']'

0

Я пытаюсь выполнить следующую оболочку, эквивалентную следующему сценарию c++

int x=1;
int y=2;
int k=0;

for (int i=0;i<10;i++)
{
   for (int j=0;j<10;j++)
   {

       if ( (x==1) && (y==2) )
       {
           k=1;
       }

   }
 }

Я всегда получаю странную ошибку синтаксиса, так как между [ или чем-то еще есть пробелы должны быть пробелы, я уверен, что одна из этих причин

Вот как выглядит мой пример кода

    for x in ${title[@]} 
    do

    for y in ${author[@]} 
    do
        if [ [ $x == $1] && [ $y == $2] ]; # error : [: missing ']'
        then
            error=1
            return "$error"
        fi
    done
   done

Как это решить?

  • 0
    ] Должен быть отдельным аргументом; это не ключевое слово. Итак, как минимум вам нужно пространство между 2 и ] . Это тогда оставляет вас с недопустимым внешним [ команда; вам нужно использовать либо тест [[ и ]] , либо вам нужно переписать команду [ ... ] более осторожно (возможно, как два вызова команды [ ).
  • 0
    Было бы полезно, если бы вы указали, какую оболочку вы используете.
Теги:
debugging
command

1 ответ

1
Лучший ответ

Замените, if [ [ $x == $1] && [ $y == $2] ]; if [[ $x == $1 && $y == $2 ]];

  • 1
    Я думаю, что вы должны использовать либо [ "$x" = "$1" ] && [ "$y" = "$2" ] или [[ "$x" == "$1" && "$y" == "$2" ]] где кавычки могут не понадобиться во втором (благодаря некоторым специальным правилам, которые просто усложняют жизнь), но в первом случае они настоятельно рекомендуются.
  • 0
    @JonathanLeffler Я полагаю, что ваши 2 решения логически эквивалентны моему решению :) Вы безопаснее, используя кавычки.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню