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

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

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

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

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

решение1

echo "*file 2" | grep -o ^.отпечатки *.

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

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

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

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

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