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 
  • Как присвоить значение переменной, когда значение содержит символ $ в ней
  • Расширение «$ @» для пользовательских переменных
  • Удалить определенное слово в переменной
  • перечислить файлы и сохранить их в переменных
  • Могу ли я определить тип переменной awk?
  • Переменная в команде find задана новой переменной в bash
  • Использование eval в файле make
  • шаблон awk с переменной в скрипте bash
  • Каков наиболее эффективный способ grep для двух совершенно разных вещей и присвоения значений отдельным переменным?
  • Создание функции, отображающей имя переменной и ее значение
  • Как изменить переменные
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.