Искусство программирования на языке сценариев командной оболочки
Шрифт:
exit $E_NO_ARGS
fi
var01=abcdEFGH28ij
echo "var01 = ${var01}"
echo "Length of var01 = ${#var01}"
echo "Количество входных параметров = ${#@}"
echo "Количество входных параметров = ${#*}"
exit 0
${var#Pattern}, ${var##Pattern}
Удаляет
Пример использования из Пример A-8:
# Функцмя из сценария "days-between.sh".
# Удаляет нули, стоящие в начале аргумента-строки.
strip_leading_zero # Ведущие нули, которые согут находиться в номере дня/месяца,
# лучше удалить
val=${1#0} # В противном случае Bash будет интерпретировать числа
return $val # как восьмеричные (POSIX.2, sect 2.9.2.1).
}
Другой пример:
echo `basename $PWD` # Имя текущего рабочего каталога.
echo "${PWD##*/}" # Имя текущего рабочего каталога.
echo
echo `basename $0` # Имя файла-сценария.
echo $0 # Имя файла-сценария.
echo "${0##*/}" # Имя файла-сценария.
echo
filename=test.data
echo "${filename##*.}" # data
# Расширение файла.
${var%Pattern}, ${var%%Pattern}
Удаляет из переменной $var наименьшую/наибольшую подстроку, совпадающую с шаблоном $Pattern. Поиск ведется с конца строки $var.
Bash версии 2 имеет ряд дополнительных возможностей.
Пример 9-16. Поиск по шаблону в подстановке параметров
#!/bin/bash
# Поиск по шаблону в операциях подстановки параметров # ## % %%.
var1=abcd12345abc6789
pattern1=a*c # * (символ шаблона), означает любые символы между a и c.
echo
echo "var1 = $var1" # abcd12345abc6789
echo "var1 = ${var1}" # abcd12345abc6789 (альтернативный
echo "Число символов в ${var1} = ${#var1}"
echo "pattern1 = $pattern1" # a*c (между 'a' и 'c' могут быть любые символы)
echo
echo '${var1#$pattern1} =' "${var1#$pattern1}" # d12345abc6789
# Наименьшая подстрока, удаляются первые 3 символа abcd12345abc6789
^^^^^^ |-|
echo '${var1##$pattern1} =' "${var1##$pattern1}" # 6789
# Наибольшая подстрока, удаляются первые 12 символов abcd12345abc6789
# ^^^^^^ |----------|
echo; echo
pattern2=b*9 # все, что между 'b' и '9'
echo "var1 = $var1" # abcd12345abc6789
echo "pattern2 = $pattern2"
echo
echo '${var1%pattern2} =' "${var1%$pattern2}" # abcd12345a
# Наименьшая подстрока, удаляются последние 6 символов abcd12345abc6789
# ^^^^^^^^^ |----|
echo '${var1%%pattern2} =' "${var1%%$pattern2}" # a
# Наибольшая подстрока, удаляются последние 12 символов abcd12345abc6789
# ^^^^^^^^^ |-------------|
# Запомните, # и ## используются для поиска с начала строки,
# % и %% используются для поиска с конца строки.
echo
exit 0
Пример 9-17. Изменение расширений в именах файлов:
#!/bin/bash
# rfe
# ---
# Изменение расширений в именах файлов.
#
# rfe old_extension new_extension
#
# Пример:
# Изменить все расширения *.gif в именах файлов на *.jpg, в текущем каталоге
# rfe gif jpg
ARGS=2
E_BADARGS=65
if [ $# -ne "$ARGS" ]