Советы по Bash/ShellScript

Заметки из очень полезной ссылки https://zwischenzugs.com/2018/01/06/ten-things-i-wish-id-known-about-bash/

Предпочитайте $() вместо ``

Если вы хотите зафиксировать возврат команды в переменной, лучше использовать $() вместо ``

$ echo `echo \`echo \\\`echo inside\\\`\``
$ echo $(echo $(echo $(echo inside))) # more elegant and readable

Используйте [[ вместо [ в операторах if

Поддерживает дружественные && || ‹ › и не ограничивается -a -o и т. д.

Лучшая обработка пустых мест в $variable, без кавычек if [[ -f $file ]]

Поддерживает сопоставление шаблонов регулярных выражений if [[ $answer =~ ^y(es)?$ ]] instead of if [ "$answer" = y -o "$answer" = yes ]

Узнайте больше о том, почему [[ лучше, чем [ : здесь и здесь

‹() Когда команда ожидает Файл в качестве параметра

Если вы хотите передать вывод команды другой команде, которая ожидает файлы в качестве входных данных, использование ‹() позволит избежать сохранения в промежуточных файлах. например

diff <(grep somestring file1) <(grep somestring file2)

!$ Чтобы получить параметры предыдущих команд

Чтобы повторить последний параметр предыдущей команды в текущей команде, например

grep somestring /long/path/to/some/file/or/other.txt
vi !$
!:1-$ ==> to repeat all the parameters of previous command

Запуск оболочки и последовательность загрузки точечных файлов

Это всегда меня смущало, ниже очень полезная диаграмма последовательности запуска здесь

getopts для чтения аргументов сценариев оболочки

Чтобы прочитать параметры для этого скрипта: script.sh -v -n name

while getopts “h?v:n” opt
do
 case “${opt}” in
 h|\?)
 show_help
 exit 0
 ;;
 v) VERBOSE=1 ;;
 n) NAME=${OPTARG} ;;
 esac
done