Операции, которые могут быть выполнены с переменными оболочки Bash - PullRequest
2 голосов
/ 11 февраля 2010

Я знал несколько операций, которые мы можем сделать с переменными в оболочке, например:

1) Операция "#" & "##"

с помощью $ {var # pattern} мы удаляем «pattern» из заголовка $ {var}. «*» может использоваться в шаблоне, чтобы соответствовать всему. И разница между "#" и "##" заключается в том, что "##" удалит самую длинную подстроку соответствия, а "#" удалит самую короткую. Например,

var=brbread
${var##*br} // ead
${var#*br} // bread

2) Операция "%" & "%%"

с помощью $ {var% pattern} мы удаляем «pattern» в конце $ {var}. Конечно, «%%» означает самое длинное совпадение, а «%» означает самое короткое. Например,

var=eadbreadbread
${var%%*br} // eadbreadbread
${var%%br*} // ead
${var%br*} // eadbread

3) "/" операция

с $ {var / haha ​​/ heihei}, мы заменяем «haha» в $ var на «heihei». Например,

var=ihahai
${var/haha/heihei/} / iheiheii

Мне просто любопытно, можем ли мы сделать больше операций с переменными, кроме указанных выше?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 11 февраля 2010

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

Вам следует проверить страницу руководства в разделе Расширение параметров .

3 голосов
/ 11 февраля 2010

В одном из ваших примеров вы можете выполнить глобальную замену двумя слешами:

${var//ha/hei/}  # the result would be the same

(Обратите внимание, что в Bash символом комментария является "#".)

Вот несколько примеров операций с переменными расширения параметров:

Укажите значение по умолчанию:

$ unset foo
$ bar="hello"
$ echo ${foo:-$bar}    # if $foo had a value, it would be output
hello

Альтернативное значение:

$ echo ${bar:+"goodbye"}
goodbye
$ echo ${foo:+"goodbye"}    # no substitution

Подстроки:

$ echo ${bar:1:2}
el
$ echo ${bar: -4:2}    # from the end (note the space before the minus)
el

Список ключей массива:

$ array=(123 456)
$ array[12]=7890
$ echo ${!array[@]}
0 1 12

Длина параметра:

$ echo ${#bar}
5
$ echo ${#array[@]}    # number of elements in an array
3
$ echo ${#array[12]}   # length of an array element
4

Изменить регистр (Bash 4):

$ greeting="hello jim"
$ echo ${greeting^}
Hello jim
$ echo ${greeting^^}
HELLO JIM
$ greeting=($greeting)
$ echo ${greeting[@]^}
Hello Jim
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...