Перетворення рядка в int не працює належним чином у терміналі


0

Перетворення рядка в int не працює належним чином у терміналі.

Я хочу дізнатися, скільки часу виникає конкретна строка у великій струні.

if ((echo "iOS/i" | grep -o iOS/ | wc -l | bc)>2) then echo "ThreeOrMore"; else echo"TwoOrLess"; fi

результат

ThreeOrMore

Але результат насправді повинен бути TwoOrLess

але внутрішня частина працює добре

echo "iOS/i" | grep -o iOS | wc -l | bc

результат

1

Відповіді:


1

Ви не можете використовувати >для порівняння чисел у bash( >використовується для перенаправлення виводу у файл), вам потрібно запустити порівняння як частину команди test/ [. Крім того, заклик до bc, здається, нічого не робить, echo "iOS/i" | grep -o iOS | wc -lвже виводить 1.

Оновлений фрагмент виглядає приблизно так (розділити на кілька рядків для легшої читабельності):

if [ $(echo "iOS/i" | grep -o iOS/ | wc -l) -gt 2 ]; then
    echo "ThreeOrMore"
else
    echo "TwoOrLess"
fi

1
Отже | wc -l потрібен. Я намагався опустити wc -l, але цей вираз не повернувся 3: echo "iOS / iOS / iOS" | grep -o -c iOS
Voloda2

Ах, схоже, що я щось чомусь навчився. Дякую, я відповідно відредагую відповідь.
nohillside
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.