Я новичок в сценариях оболочки, и у меня возникают проблемы при использовании команды «test» и специальной символ * для сравнения двух строк.Сообщение «test: too many arguments» из-за специального символа * при использовании команды test в bash для сравнения двух строк
Мне нужно написать сценарий оболочки, который для каждого элемента (обоих файлов и каталогов), содержащегося в каталоге, переданном в качестве первого аргумента, должен что-то написать (для решения моей проблемы не имеет значения знать, что должно быть записано) в файле «summary.out». Более того, в качестве второго аргумента есть строка. Эти файлы/каталоги, начинающиеся с этой строки, должны игнорироваться (ничто не должно быть написано на summary.out).
Вот код:
#!/bin/bash
TEMP=NULL
cd "$1"
for i in *
do
if test "$i" != "$2"*;then #Here is where the error comes from
if test -f "$i";then
TEMP="$i - `head -c 10 "$i"`"
elif test -d "$i";then
TEMP="$i - `ls -1 "$i" | wc -l`"
fi
echo $TEMP >> summary.out
fi
done
ошибка происходит из теста, который проверяет, начинается ли текущий файл/каталог со строкой, переданной в качестве второго аргумента, и это происходит каждую итерацию для цикла. В нем говорится: «test: too many arguments»
Теперь я провел несколько тестов, которые показали, что проблема не имеет ничего общего с пустым пространством внутри $ i или $ 1. Проблема связана с тем, что я использую специальный символ * в тесте (если я его удалю, все работает нормально).
Почему нельзя «проверять» ручку *? Что я могу сделать, чтобы исправить это?
http://www.tldp.org/LDP/abs/html/special-chars.html#ASTERISKREF –
Вы можете использовать 'сделано> summary.out' вместо' >> summary.out' к избегайте многократного открытия и закрытия файла в цикле. –