Я пытаюсь выполнить следующую оболочку, эквивалентную следующему сценарию 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
Как это решить?
Замените, if [ [ $x == $1] && [ $y == $2] ];
if [[ $x == $1 && $y == $2 ]];
[ "$x" = "$1" ] && [ "$y" = "$2" ]
или [[ "$x" == "$1" && "$y" == "$2" ]]
где кавычки могут не понадобиться во втором (благодаря некоторым специальным правилам, которые просто усложняют жизнь), но в первом случае они настоятельно рекомендуются.
]
Должен быть отдельным аргументом; это не ключевое слово. Итак, как минимум вам нужно пространство между 2 и]
. Это тогда оставляет вас с недопустимым внешним[
команда; вам нужно использовать либо тест[[
и]]
, либо вам нужно переписать команду[
...]
более осторожно (возможно, как два вызова команды[
).