Bash → Язык командного интерпретатора bash. Part 6. «Условная подстановка параметров»
Продолжаю цикл статей о языке командного интерпретатора bash темой условной подстановки параметров. Благодаря условной подстановке параметров можно проверить, получил ли параметр значение, а также применять вместо его текущего значения другое.
Теперь перейдём к непосредственному разбору различных конструкций подстановок.
${параметр-строка}, ${параметр:-строка}
Логика конструкции: если параметр отсутствует, используется указанная строка, если непустое – значение по умолчанию.
Обе формы записи можно считать равнозначными в большинстве случаев. Символ ":" имеет значение когда параметр инициализирован, но имеет пустое значение. Приведу пару примеров для разъяснения ситуации:
${параметр=строка}, ${параметр:=строка}
Логика конструкции: если параметр имеет пустое значение или не инициализирован, то ему присваивается указанное значение, после чего оно подставляется. Символ ":" имеет значение когда параметр инициализирован. Разберём на примерах:
${параметр+строка}, ${параметр:+строка }
Логика конструкции: если параметр имеет значение, то используется оно, в противном случае – альтернативная строка. Различия конструкций разберём на примерах:
${параметр? сообщение}, ${параметр:? сообщение}
Логика конструкции: если параметр инициализирован, используется его значение; если параметр не инициализирован – выводится сообщение.
${#параметр}
Логика конструкции: возвращается длина значения параметра в байтах. В случае массивов, команда ${#array} возвращает длину первого элемента массива.
Исключения:
1) ${#*} и ${#@} возвращает количество аргументов (позиционных параметров).
2) Для массивов, ${#array[*]} и ${#array[@]} возвращает количество элементов в массиве.
${параметр#шаблон}, ${параметр##шаблон}
Логика конструкции: удаляет из параметра наименьшую (наибольшую) подстроку, удовлетворяющую указанному шаблону, начиная из головной части значения параметра.
Пример:
${var%Pattern}, ${var%%Pattern}
Логика конструкции: удаляет из параметра наименьшую (наибольшую) подстроку, удовлетворяющую указанному шаблону, начиная из хвостовой части значения параметра. По сути данная конструкция повторяет предыдущую, только начиная с конца значения параметра.
Теперь перейдём к непосредственному разбору различных конструкций подстановок.
${параметр-строка}, ${параметр:-строка}
Логика конструкции: если параметр отсутствует, используется указанная строка, если непустое – значение по умолчанию.
Обе формы записи можно считать равнозначными в большинстве случаев. Символ ":" имеет значение когда параметр инициализирован, но имеет пустое значение. Приведу пару примеров для разъяснения ситуации:
param1=
echo ${param1-"Hello"}
Вывода не будет произведено, так как param1 инициализирован, но имеет пустое значение.echo ${param2-"Hello"}
Будет выведена указанная строка, так как параметр не был инициализирован.param2=
echo ${param2:-"Hello"}
Будет выведена указанная строка, так как параметр был инициализирован пустым значением, но использовалась конструкция ":-".${параметр=строка}, ${параметр:=строка}
Логика конструкции: если параметр имеет пустое значение или не инициализирован, то ему присваивается указанное значение, после чего оно подставляется. Символ ":" имеет значение когда параметр инициализирован. Разберём на примерах:
param3=
echo ${param3="Hello"}
Так как параметр не инициализирован, он не будет выведен.echo ${param4:="Hello"}
Будет выведена указанная строка, так как param4 не инициализирован.param5="param"
echo ${param:="Hello"}
Будет выведено первоначальное значение параметра.${параметр+строка}, ${параметр:+строка }
Логика конструкции: если параметр имеет значение, то используется оно, в противном случае – альтернативная строка. Различия конструкций разберём на примерах:
echo ${param6+"Hello"}
Ничего не выводится.param7=
echo ${param6+"Hello"}
Будет выведена указанная строка.param8=123
echo ${param8+"Hello"}
Будет выведена указанная строка.echo ${param9:+"Hello"}
Ничего не выводится.param10=
echo ${param10:+"Hello"}
Ничего не выводится.param11=123
echo ${param11:+"Hello"}
Будет выведена указанная строка.${параметр? сообщение}, ${параметр:? сообщение}
Логика конструкции: если параметр инициализирован, используется его значение; если параметр не инициализирован – выводится сообщение.
echo ${param12?"hello"}
Выводится сообщение.echo ${param12:?"hello"}
Выводится сообщение.param13=
echo ${param13?"hello"}
Не выводится ничего (выводится пустое значение).param14=123
echo ${param14:?"hello"}
Выводится значение параметра.${#параметр}
Логика конструкции: возвращается длина значения параметра в байтах. В случае массивов, команда ${#array} возвращает длину первого элемента массива.
Исключения:
1) ${#*} и ${#@} возвращает количество аргументов (позиционных параметров).
2) Для массивов, ${#array[*]} и ${#array[@]} возвращает количество элементов в массиве.
param15=123
echo ${#param15}
Будет выведена длина значения параметра (в данном случае 3).${параметр#шаблон}, ${параметр##шаблон}
Логика конструкции: удаляет из параметра наименьшую (наибольшую) подстроку, удовлетворяющую указанному шаблону, начиная из головной части значения параметра.
Пример:
param16=12345
echo ${param16#123}
Будет выведено 45.$ echo $PWD
/home/istergul/fold
$ echo ${PWD##*/}
fold
${var%Pattern}, ${var%%Pattern}
Логика конструкции: удаляет из параметра наименьшую (наибольшую) подстроку, удовлетворяющую указанному шаблону, начиная из хвостовой части значения параметра. По сути данная конструкция повторяет предыдущую, только начиная с конца значения параметра.
- +11
- Istergul
- 14 июля 2009, 12:35
Пример 1
Часто мои скрипты начинаются с такой строчки:
То есть скрипт запускается и в качестве параметра ему указывается директория, которую надо обработать. Если директория не указана, то обрабатывается текущая директория.
Пример 2
Для начала задам переменную
Вывод без первых трех символов(любых)
Пример 3
Для той же переменной
Вывод с пятого по 9ый символы (то есть пропустить от начала 4ре символа и напечатать следующие 5)
Пример 4
Переименование всех jpg-файлов в текущей папке под общий шаблон: Image_число.jpg
Работает для не более 9999 файлов в текущей директории
Пример 5
Перейти в папку содержащую эту картинку
это соответствует
Пример 6
Если файл картинка(jpg), то просмотеть ей (например, при помощи програмки eog)