Bash расширений переменных параметров полная документация - PullRequest
1 голос
/ 18 июня 2020

Есть несколько менее известных bash расширений переменных:

+----------------------------------------------------------+----------------+
|                       description                        |   expression   |
+----------------------------------------------------------+----------------+
| Remove everything **after** the **last** '7'             | ${var%7*}      |
| Remove everything **after** the **first** '7'            | ${var%%7*}     |
| Remove everything **before** the **first** '7'           | ${var#*7}      |
| Remove everything **before** the **last** '7'            | ${var##*7}     |
| First char upper case                                    | ${var^}        |
| All upper case                                           | ${var^^}       |
| First char lower case                                    | ${var,}        |
| All lower case                                           | ${var,,}       |
| Show how variable was set                                | ${var@A}       |
| ?? something cool ??                                     | ${var@E}       |
| Print variable as though it were the prompt variable PS1 | ${var@P}       |
| ?? something cool ??                                     | ${var@Q}       |
+----------------------------------------------------------+----------------+

Я изо всех сил пытался найти источник, документирующий все эти уловки. Пока что лучшее, что я нашел, - это шпаргалка. Но даже на этой странице отсутствуют некоторые из этих правил расширения. Чтобы написать хороший код bash и сделать этот код переносимым, я ищу несколько вещей:

  1. Каковы все уловки с расширением переменных bash?
  2. Где есть документ, который показывает их все (в идеале с примерами)?
  3. Какие версии bash работают с какими трюками?

1 Ответ

4 голосов
/ 18 июня 2020

Некоторые полезные указатели на расширения параметров :

Вы пропустили много, например

  • одиночная замена a -> b: ${x/a/b}
  • множественные замены a -> b: ${x//a/b}
  • манипуляции со смещением: ${x:1:3}
  • ${var-word} если переменная определена, используйте var; в противном случае «слово»
  • ${var+word} если определена переменная, используйте «слово»; в противном случае ничего
  • ${var=word} если переменная определена, используйте var; в противном случае используйте «слово» И также присвойте «слово» переменной
  • ${var?error}, если переменная определена, используйте var; в противном случае выведите «error» и выйдите
  • фрагмент массива ${files[@]: -4}

Обратите внимание, что большая часть PE также работает с массивом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...