Я полагаю, что ваша остающаяся проблема в том, что $( ... )
и $(( ... ))
- это две совершенно разные вещи.Первый из них выполняет подстановку команд, что вам и нужно.Последний делает арифметику .Попробуйте это:
#! /bin/sh
x=$(grep -c '^[a-z]' "$1")
echo "$x"
Я также не знаю, почему у вас была каретка за пределами одинарных кавычек;это может вызвать проблемы с некоторыми оболочками (где символ caret либо расширяет историю, либо является псевдонимом для |), я думаю, что bash не является одной из таких оболочек, но нет причин искушать судьбу.расширяя переменные оболочки, ВСЕГДА помещайте их в двойные кавычки, если только вам не требуется разделение слов.(Вот почему я изменил $1
на "$1"
. Без этого изменения ваш скрипт сломался бы, если бы вы дали ему файл с пробелом в имени.)
РЕДАКТИРОВАТЬ: Теперь вы говорите, что хотите знать, начинается ли слово, переданное в сценарий, числом.Под «передачей в сценарий» я предполагаю, что вы имеете в виду следующее:
./script WORD
Самый простой способ сделать это, не включая grep
или подстановку команд вообще:
#! /bin/sh
case "$1" in
[0-9]*)
echo "Starts with a number"
;;
*)
echo "Doesn't start with a number"
;;
esac
Да, синтаксис "case" безвозмездно отличается от всего остального в оболочке;если вам нужен внутренне согласованный язык, Python ждет вас thataway .Шаблоны, которые вы помещаете перед каждым открытым пареном - это глобусы, а не регулярные выражения.Если вам нужно регулярное выражение, вы должны сделать что-то более сложное, например,
#! /bin/sh
if [ $(expr "$1" : '[0-9]\{3,5\}x') -gt 0 ]; then
echo "Starts with a three-to-five digit number followed by an x"
fi
Некоторые люди говорят, что нет необходимости помещать кавычки вокруг расширения переменной, которое находится между case
и in
.Они технически правильны, но все равно их следует игнорировать, потому что это слишком много бородавок, чтобы помнить.Другие люди говорят, что вы можете ставить открытые скобки перед каждым глобусом, и тогда ваш редактор не будет раздражен по поводу несоответствующих скобок.Я одобряю отсутствие раздражительности редактора, но я не знаю, насколько это вариативно.