
Вот часть моего скрипта, которая сообщает мне, что в строке 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 ^.)" = '.' ]
ВидетьПочему мой скрипт оболочки тормозит пробелы и другие специальные символы?для более подробного объяснения.