bash Значение по умолчанию для аргумента командной строки - пример

Для получения первого параметра командной строки, можно использовать конструкцию вида:

${1-значениеПоУмолчанию}

или c двоеточием:

${1:-значениеПоУмолчанию}

Что понять разницу, можно создать такие пользовательские команды:

# Считает пустую строку подходящим значением
function testDefaultParameter() { 
    echo ${1-'no data here!'}
}

# Не считает пустую строку подходящим значением
function testDefaultParameterNoEmptyLine() { 
    echo ${1:-'no data here!'}
}

и вызывать их, напр,, для сравнения (4 вызова):

testDefaultParameter
testDefaultParameter ""
testDefaultParameterNoEmptyLine
testDefaultParameterNoEmptyLine ""

Аргумент в кавычках

Если вам нужно, чтобы аргумент из нескольких слов нормально обрабатывался нижележащей командой, которая ожидает одну строку (напр. как git commit), то можно взять всю конструкцию в кавычки, и при этом убрать их с аргумента по умолчанию (даже если в нем тоженесколько слов), напр:

# передает значение дальше в кавычках, если оно установлено и не пустая строка
function testDefaultParameterNoEmptyLine() { 
    git commit -m "${1:-default commit message}"
}

Источник идеи: https://stackoverflow.com/a/9333006

Key Words for FKN + antitotal forum (CS VSU):