Чтение онлайн

на главную - закладки

Жанры

Командная строка Linux
Шрифт:

default value if unset

[me@linuxbox ~]$ foo=bar

[me@linuxbox ~]$ echo ${foo:="default value if unset"}

bar

[me@linuxbox ~]$ echo $foo

bar

ПРИМЕЧАНИЕ

Таким способом нельзя присваивать значения позиционным и другим специальным параметрам.

Ниже демонстрируется форма со знаком вопроса:

${параметр:?слово}

Если параметр не определен или содержит пустое

значение, механизм подстановки завершит сценарий с ошибкой и выведет значение указанного слова в стандартный вывод ошибок. Если параметр не пустой, механизм подстановки вернет значение параметра.

[me@linuxbox ~]$ foo=

[me@linuxbox ~]$ echo ${foo:?"parameter is empty"}

bash: foo: parameter is empty

[me@linuxbox ~]$ echo $?

1

[me@linuxbox ~]$ foo=bar

[me@linuxbox ~]$ echo ${foo:?"parameter is empty"}

bar

[me@linuxbox ~]$ echo $?

0

Ниже демонстрируется форма со знаком «плюс»:

${параметр:+слово}

Если параметр не определен или содержит пустое значение, механизм подстановки вернет пустое значение. Если параметр не пустой, механизм подстановки вернет значение слова, но сам параметр не изменится.

[me@linuxbox ~]$ foo=

[me@linuxbox ~]$ echo ${foo:+"substitute value if set"}

[me@linuxbox ~]$ foo=bar

[me@linuxbox ~]$ echo ${foo:+"substitute value if set"}

substitute value if set

Получение имен переменных

Командная оболочка может возвращать имена переменных. Это используется в некоторых экзотических ситуациях.

${!префикс*}

${!префикс@}

Эти две формы подстановки возвращают имена существующих переменных, начинающиеся с указанного префикса. Согласно документации bash, обе формы действуют совершенно одинаково. Следующая команда выводит список всех переменных окружения с именами, начинающимися с BASH:

[me@linuxbox ~]$ echo ${!BASH*}

BASH BASH_ARGC BASH_ARGV BASH_COMMAND BASH_COMPLETION BASH_COMPLETION_DIR BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION

Операции со строками

Существует множество форм подстановки, которые можно использовать для работы со строками. Многие из них особенно хорошо подходят для операций с путями. Форма

${#параметр}

вернет длину строки, содержащуюся в указанном параметре. Обычно роль параметра играет строка, но если передать @ или *, то механизм подстановки вернет число позиционных параметров.

[me@linuxbox ~]$ foo="This string is long."

[me@linuxbox ~]$ echo "'$foo' is ${#foo} characters long."

'This string is long.' is 20 characters long.

Следующая форма подстановки:

${параметр:смещение}

${параметр:смещение:длина}

используется

для извлечения фрагмента строки, содержащейся в параметре. Извлечение начинается с указанного смещения от начала строки и продолжается до конца строки, если не указана длина.

[me@linuxbox ~]$ foo="This string is long."

[me@linuxbox ~]$ echo ${foo:5}

string is long.

[me@linuxbox ~]$ echo ${foo:5:6}

string

Если указать отрицательное смещение, его отсчет начнется с конца строки вместо начала. Обратите внимание, что отрицательному значению должен предшествовать пробел, чтобы предотвратить путаницу с формой ${параметр:-слово}. Длина, если указана, в этом случае также должна быть меньше 0. Если в качестве параметра передать @, результатом подстановки будет длина позиционных параметров, начиная с указанного смещения.

[me@linuxbox ~]$ foo="This string is long."

[me@linuxbox ~]$ echo ${foo: -5}

long.

[me@linuxbox ~]$ echo ${foo: -5:2}

lo

Следующие две формы:

${параметр#шаблон}

${параметр##шаблон}

возвращают значение параметра, удаляя из него начальную часть, определяемую указанным шаблоном. В шаблоне допускается использовать групповые символы: например, те, что используются в подстановке путей. Эти две формы отличаются тем, что форма # удаляет кратчайшее совпадение, тогда как форма ## удаляет самое длинное совпадение.

[me@linuxbox ~]$ foo=file.txt.zip

[me@linuxbox ~]$ echo ${foo#*.}

txt.zip

[me@linuxbox ~]$ echo ${foo##*.}

zip

Следующие две формы:

${параметр%шаблон}

${параметр%%шаблон}

действуют так же, как формы # и ##, представленные выше, но удаляют текст с конца строки, содержащейся в параметре.

[me@linuxbox ~]$ foo=file.txt.zip

[me@linuxbox ~]$ echo ${foo%.*}

file.txt

[me@linuxbox ~]$ echo ${foo%%.*}

file

Следующие формы:

${параметр/шаблон/строка}

${параметр//шаблон/строка}

${параметр/#шаблон/строка}

${параметр/%шаблон/строка}

Поделиться:
Популярные книги

Вдова на выданье

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Вдова на выданье

Шлейф сандала

Лерн Анна
Фантастика:
фэнтези
6.00
рейтинг книги
Шлейф сандала

Отморозки

Земляной Андрей Борисович
Фантастика:
научная фантастика
7.00
рейтинг книги
Отморозки

Ведьмак (большой сборник)

Сапковский Анджей
Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Ведьмак (большой сборник)

Надуй щеки! Том 2

Вишневский Сергей Викторович
2. Чеболь за партой
Фантастика:
попаданцы
дорама
фантастика: прочее
5.00
рейтинг книги
Надуй щеки! Том 2

Новый Рал 7

Северный Лис
7. Рал!
Фантастика:
попаданцы
5.00
рейтинг книги
Новый Рал 7

Камень. Книга вторая

Минин Станислав
2. Камень
Фантастика:
фэнтези
8.52
рейтинг книги
Камень. Книга вторая

По воле короля

Леви Кира
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
По воле короля

Фею не драконить!

Завойчинская Милена
2. Феями не рождаются
Фантастика:
юмористическая фантастика
5.00
рейтинг книги
Фею не драконить!

Лишняя дочь

Nata Zzika
Любовные романы:
любовно-фантастические романы
8.22
рейтинг книги
Лишняя дочь

Идеальный мир для Лекаря 22

Сапфир Олег
22. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 22

Новый Рал 3

Северный Лис
3. Рал!
Фантастика:
попаданцы
5.88
рейтинг книги
Новый Рал 3

Ученик. Книга 4

Первухин Андрей Евгеньевич
4. Ученик
Фантастика:
фэнтези
5.67
рейтинг книги
Ученик. Книга 4

Ворон. Осколки нас

Грин Эмилия
2. Ворон
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ворон. Осколки нас