Баш: смысл “[: слишком много аргументов” ошибка, если [] (квадратные скобки)

Для начала скажу, что я зарабатываю через вот этого брокера, проверен он временем! А вот хороший пример заработка, человек зарабатывает через интернет МНОГО МНОГО МНОГО и показывает все на примерах, переходи и читай! Добавь страницу в закладки. А теперь читаете информацию ниже и пишите свой отзыв

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

Ошибки:

-bash: [: too many arguments 

Гугл-версия: bash open square bracket too many arguments.

Контекст: если условие в одинарные квадратные скобки с простого оператора сравнения, как, равно, больше и т. д., например:

VARIABLE=$(/some/command); if [ $VARIABLE == 0 ]; then   # some action fi  

Только что наткнулся на этот пост, получив ту же ошибку, пытаясь проверить, если две переменные не как пустой (или не пустой). Что оказывается составной сравнения – 7.3. Другие операторы сравнения – Продвинутый Баш-скриптов Руководство; и я думал, что я должен отметить следующее:

  • Я использовал -e думая, что это означает “пустой” на первый; но что значит “файл существует” – использовать -z для тестирования пустая переменная (строка)
  • Строковые переменные должны быть указаны
  • Для сложных логических и сравнения, либо:
    • использовать два testS и && них: [ ... ] && [ ... ]
    • или использовать -a оператор в одном test: [ ... -a ... ]

Вот рабочая команда (поиск через все файлы txt в папке, и захоронения тех, что grep находки содержат обе из двух слов):

find /usr/share/doc -name '*.txt' | while read file; do    a1=$(grep -H "description" $file);    a2=$(grep -H "changes" $file);    [ ! -z "$a1" -a ! -z "$a2"  ] && echo -e "$a1 n $a2" ;  done 

редактирование 12 августа 2013 года: проблемы, связанные Примечание:

обратите внимание, что при проверке равенства строк с классическим test (один квадратный кронштейн [), вы должны иметь пространство между “равно” оператор, который в данном случае является подпалить “равно” = знак (хотя два равно знаки == воспринимаются как оператор равенства). Таким образом, это не удается (молча):

$ if [ "1"=="" ] ; then echo A; else echo B; fi  A $ if [ "1"="" ] ; then echo A; else echo B; fi  A $ if [ "1"="" ] && [ "1"="1" ] ; then echo A; else echo B; fi  A $ if [ "1"=="" ] && [ "1"=="1" ] ; then echo A; else echo B; fi  A 

… но добавить пространство – и все выглядит хорошо:

$ if [ "1" = "" ] ; then echo A; else echo B; fi  B $ if [ "1" == "" ] ; then echo A; else echo B; fi  B $ if [ "1" = "" -a "1" = "1" ] ; then echo A; else echo B; fi  B $ if [ "1" == "" -a "1" == "1" ] ; then echo A; else echo B; fi  B 
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Оставить комментарий

Ваш email нигде не будет показанОбязательные для заполнения поля помечены *

*