LINUX.ORG.RU

Много аргументов в if из-за *

 , ,


0

2

Пишу скрипт

if [ "$1" == *".txt" ]
then
	printf "asd"
fi

Выходит это:

./oo: строка 14: [: слишком много аргументов

Но если я меняю if [ "$1" == *".txt" ] на if [ "$1" == "*.txt" ], то все работает, но желаемого результата нет

Изменено:

Всем спасибо, помогло добавление второй пары квадратных скобок, т.е. if [[ "$1" == *".txt" ]]

Ответ на: Когда вопрос задан *почти* правильно от anonymous

А желаемый результат-то какой?

А разве не очевидно? Нужно узнать, равняется-ли файл файл чему-то, оканчивающееся на .txt, что-то это и есть*

Может, Вам expr с его поддержкой регулярных выражений нужен, или $(basename), или ещё что?

Вопрос именно по SH скрипту, не думаю, что стоит использовать что-то стороннее, когда есть встроенное IF

madreyk ()
Ответ на: комментарий от madreyk

равняется-ли файл файл чему-то, оканчивающееся на .txt, что-то это и есть*

Вы делаете это неправильно. * развернется в список файлов в текущей директории.

if [[ "$name" == *.txt ]]; ....
PPP328 ★★★★ ()

Ну наверное нужно во-первых, сначала разобраться как работают конструкции, а потом пытаться с ними что-то делать, а во вторых, задавая вопрос, упомянуть какой у тебя желаемый результат.

В конструкции [ "$1" == *".txt" ] *".txt" развернётся в список файлов *.txt в текущем каталоге, т.е. во что-то типа [ "$1" == a.txt b.txt c.txt ], что есть бред.

В конструкции [ "$1" == "*.txt" ] $1 сравнится со строкой *.txt.

Если ты желаешь проверить $1 на соответствие маске то можно сделать, например так:

if echo "$1" | grep -q '.\.txt$'; then

Если ты желаешь проверить есть ли имя файла $1 в текущем каталоге то так:

if [ -e "$1" ]; then

slovazap ★★★★★ ()
Последнее исправление: slovazap (всего исправлений: 1)

Ахаха, башщхъ. Наслаждайся. Я каждый раз гуглю, когда нужно в скрипте сделать if. Это ж надо было настолько криво слепить язык. Специально захочешь - не сможешь.

ox55ff ★★★★ ()
Ответ на: комментарий от madreyk

Нужно узнать, равняется-ли файл файл чему-то, оканчивающееся на .txt

Прочитай тогда про разницу между регэкспами и глоббингом. То, что тебе надо, делается так

if [[ "$1" =~ txt$ ]] ; then

gremlin_the_red ★★★★ ()