Почему я получаю «слишком много аргументов»,

Вот часть моего скрипта, который говорит мне, что у меня слишком много аргументов в строке 3:

#!/bin/bash export LC_ALL='C' if [ `echo "*file 2" | grep -o ^.` = '.' ] then echo success fi 

Кто-нибудь знает, почему? Насколько я могу судить, я просто сравниваю два аргумента: «*» и «.».

One Solution collect form web for “Почему я получаю «слишком много аргументов»,”

echo "*file 2" | grep -o ^. принт * .

Поскольку у вас есть замена команды за пределами двойных кавычек, она подвергается глобальному подбору (например, подстановочному знаком, соответствующему генерации имени aka) и разбиению слов. Если текущий каталог не пуст, * расширяется до списка файлов в текущем каталоге. Каждый файл становится одним токеном в команде [ command], которая, скорее всего, будет синтаксической ошибкой.

Проблема в том, что вы не использовали двойные кавычки вокруг подстановки команд. Всегда используйте двойные кавычки вокруг переменных и подстановок команд, если у вас нет веских причин их пропускать.

 if [ "$(echo "*file 2" | grep -o ^.)" = '.' ] 

См. Почему мой сценарий оболочки задыхается от пробелов или других специальных символов? для более подробного объяснения.

  • Как отправить вывод cmd в tmp-файл, одновременно просматривая файл tmp в vim
  • Судебно-медицинский анализ: найти все файлы, модифицированные вокруг известного
  • Исполняемый скрипт не может запускаться непосредственно с рабочего стола в Arch Linux
  • Могу ли я изменить способ отображения параметров выбора?
  • Создайте файл пар из пар
  • Как я могу записать выходные данные сценария Shell в файл журнала
  • Cron Job Не работает
  • Как я могу определить, какое устройство или имя файла я перенаправляю
  • Как подождать файл в сценарии оболочки?
  • Awk - выводит вторую строку из нескольких файлов .dat в один файл
  • Что происходит в этой функции?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.