Awk является неверным решением здесь. Как насчет:
if [[ "$task" =~ ^Clean ]]; then
echo hello
fi
Существует также подлый метод замены:
if [ "${task/#Clean/}" != "$task" ]; then
echo hello
fi
Но я нахожу что быть намного менее читаемым.
Chris считает, что случай более опрятен..., давайте испытаем это:
case $task in
Clean*)
echo hello
;;
esac
Мой эстетический смысл говорит "ад не со звонками на", и играющий с форматированием (Clean*) echo hello;;
или подобный), не поможет многому, IMAO. Если Вы хотите условное выражение, используйте if
, Я говорю.
Ответ Womble, вероятно, для чего я пошел бы, но можно также использовать grep:
if echo cleanarf | grep -qi '^clean'; then
echo foo
fi
Отбросьте i
переключитесь на grep, если Вы хотите его чувствительный к регистру (или если Вы не хотите его нечувствительный к регистру :-p).
В Вашем первом примере Вы используете echo
обеспечить awk
с файлом (stdin
), но в Вашем сценарии, нет никакого файла для awk
для обработки и это "подвешивает" ожидание входа. Вы могли использовать echo
в Вашем переменном присвоении в $()
, но я предпочитаю использовать /dev/null
с этой целью (т.е. когда нет никакого фактического файла для обработки).
Для предотвращения неловкого заключения в кавычки можно использовать переменную передачу с -v
опция предоставить переменные Bash awk
сценарий.
Необходимо найти, что это работает:
idx=$(awk -v task="$task" '{print index(task, "Clean")}' /dev/null)
echo $idx
if [ "$idx" == "0" ]; then
echo hello
fi
Необходимо, вероятно, использовать предложение womble, тем не менее, так как оно не требует порождения отдельного процесса.
[[ =~
использование фактический регулярные выражения. – womble♦ 17 November 2009 в 20:28