Мне нужен оператор if / then в Bash, и я не могу заставить его работать. Я хотел бы сказать: «Если строка начинается с символа >, то сделайте это, иначе сделайте что-нибудь еще».

У меня есть:

while IFS= read -r line
do
    if [[$line == ">"*]]
    then
        echo $line'first'
    else
        echo $line'second'
    fi
done

Но это не работает. Я также попытался избежать символа ">", сказав:

if [[$line == ^\>*]]

Что тоже не сработало. В обоих случаях я получаю эту ошибку:

line 27: [[>blah: command not found

Предложения?

1
Stephopolis 18 Фев 2014 в 19:28

4 ответа

Лучший ответ

Пробелы необходимы внутри [[ and ]] следующим образом:

if [[ "$line" == ">"* ]]; then 
    echo "found"
else
    echo "not found"
fi
5
anubhava 18 Фев 2014 в 15:49
if grep -q '>' <<<$line; then
   ..
else
   ..
fi

Использовать grep намного лучше :)

0
Somya Arora 21 Июн 2016 в 13:43

Интервал важен.

$ [[ ">test" == ">"* ]]; echo $?
0
$ [[ "test" == ">"* ]]; echo $?
1
1
SylvainD 18 Фев 2014 в 15:32

Эта попытка использует регулярное выражение:

line="> line"
if [[ $line =~ ^\> ]] ; then 
    echo "found"
else
    echo "not found"
fi

Здесь используется шаблон глобуса:

line="> line"
if [[ $line == \>* ]] ; then 
    echo "found"
else
    echo "not found"
fi
2
hek2mgl 18 Фев 2014 в 15:47