bash – определяющие переменные с VAR = $ {: – по умолчанию}

Я столкнулся с скриптом, который использует

VAR1=${1:-8}

VAR2=${2:-4}

Я вижу некоторые другие вопросы и играю с некоторым кодом, который

VAR1=${VAR2:-8}

создаст VAR1 со значением любого VAR2 , если он существует. Если VAR2 не установлен, VAR1 умолчанию будет иметь значение 8, а VAR2 останется VAR2 . То есть после этой команды echo VAR2 ничего не вернет.

Итак, мой вопрос заключается в том, что делает первая строка кода. Поскольку имена переменных не могут начинаться с чисел, VAR1 явно не устанавливается в 1 или любую переменную с именем 1. Конечно, есть причина для этого, и это не просто бессмысленная обфускация?

2 Solutions collect form web for “bash – определяющие переменные с VAR = $ {: – по умолчанию}”

Переменные, используемые в ${1:-8} и ${2:-4} являются позиционными параметрами $1 и $2 . Они содержат значения, переданные скрипту (или функции оболочки) в командной строке. Если они не установлены, упомянутые вами замены переменных будут использовать значения по умолчанию 8 и 4 (соответственно).

Сценарий или функция оболочки могут принимать любое (?) Число аргументов, и они могут быть получены с помощью $1 , $2 , … в скрипте / функции. Чтобы получить значения позиционных параметров выше 9, нужно писать ${10} , ${11} и т. Д.

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

Другой полезной заменой переменных в этом случае является ${parameter:?word} который будет отображать word как ошибку (и выйти из скрипта), если parameter не задан:

 $ cat script.sh #!/bin/bash var1="${1:?Must provide command line argument}" printf 'I got "%s"\n' "$var1" $ ./script.sh script.sh: line 3: 1: Must provide command line argument $ ./script.sh "Hello world" I got "Hello world" 

Он относится к позиционным параметрам $1 ... $n .

${1:-default} означает «если параметр 1 не установлен или пуст, а затем используйте по default ».

Предостережение: не путайте ${1:-2} с ${1: -2} . С помощью bash последний заменяется последними двумя символами в $1 .

Пример:

 $ set -- $ echo "${1:-2}" 2 $ set 345 678 $ echo "${1:-2}" 345 $ echo "${1: -2}" 45 
  • Bash: Назначение переменной не похоже на «stick»
  • Как добавить текст в переменную в make-файле?
  • Переменные баша в команде
  • Bash: Объем переменных в цикле for с использованием тройника
  • Использование sed в сценарии оболочки с многострочными переменными
  • Установка переменной со значением по умолчанию ведет себя по-другому, если перед командой?
  • Объем переменных при вызове функции из find
  • Невозможно назначить вывод вложенных команд переменной в bash
  • Как вы обрабатываете несколько правил валидации при различных пользовательских вводах?
  • Поведение задания массива
  • grep переменная в выражении if
  • Interesting Posts

    Как фиксировать вывод хвоста -f с удаленного хоста на неопределенный срок

    Во время перезагрузки избегайте перезаписи имени хоста при использовании временного имени хоста

    Проверьте в bash, если make сделал что-то

    Получение кода выхода 139 во время работы UCF (во время постинсталляции dpkg)

    Как избавиться от расширения интеграции оболочки GNOME в Chromium на Debian?

    Как преобразовать структуру дерева файлов JSON в одну строку?

    Как создать загрузочный заголовок для загрузки powerpc MPC8309twr с SD-картой

    монтировать диск mdadm без таблицы разделов

    Почему мои изменения в .profile не влияют?

    Virt-Manager неподдерживаемая конфигурация: режим процессора

    Сервер OpenVPN на модели Raspberry Pi 2 B ограничен 5 МБ / с Вниз / вверх

    Превышение объема памяти на сервере с помощью PHP

    Изменение цвета текста имени файла

    HTTPS не работает с CentOS Apache 2.4

    postfix отправитель mailaddress переписать на основе получателя mailaddress

    Linux и Unix - лучшая ОС в мире.