Короткий ответ:
Для двух оболочек, которые ввели эту нотацию (bash
и ksh93
) скалярная переменная - это просто массив с одним элементом.
Для создания массива не требуется специального объявления. Достаточно простого присваивания, и обычное присваивание var=value
идентично var[0]=value
.
set world
Тогда:
if [ "${1%%w*}" ]
then
echo false
else
echo true
fi
w
, из исходной строки или:
if [ "$1" = "${1#w}" ]
then
echo false
else
echo true
fi
w
из исходной строки Если ваша оболочка представляет собой bash :в двойных скобках, правая -сторона оператора == является шаблоном, если он не процитирован полностью:
if [[ world == w* ]]; then
echo true
else
echo false
fi
Или короче :[[ world == w* ]] && echo true || echo false
[ *]
Если вы не ориентируетесь конкретно на bash :, используйте оператор case для сопоставления с образцом
case "world" in
w*) echo true ;;
*) echo false ;;
esac
[ *] но вы должны быть осторожны с формой A && B || C
, потому что C
будет выполнено, если либо A не сработает , либо B не сработает. Форма if A; then B; else C; fi
будет только выполнять C, если A терпит неудачу.