2015-06-30 3 views
1

я нашел следующую команду в Баш скрипт:

git blame $NOT_WHITESPACE --line-porcelain "${[email protected]}" -- "$file" 

Что это ${[email protected]} значит? Пробуя, он возвращает 2-й аргумент и «@», если он не существует. According to the documentation, ${2:[email protected]} должен делать то же самое. Я попробовал, и это действительно так. Какая разница? Где это задокументировано? На странице руководства, похоже, ничего не сказано об этой нотации.

+0

См. 'Man bash',' Parameter Expansion'. Между двумя формами нет разницы, но насколько я помню, второй вариант '$ {2:. @}' Должен быть предпочтительным. – helpermethod

+1

@helpermethod есть небольшая разница. См. Мой ответ. – fedorqui

+1

@fedorqui Спасибо за исправление, полностью забыл о различии. – helpermethod

ответ

8

От Bash hackers wiki - parameter expansion:

$ {ПАРАМЕТР: -слово}

$ {ПАРАМЕТР-СЛОВО}

Если параметр не задан (не определен) или нулевой (пусто), этот расширяется до WORD, в противном случае он расширяется до значения PARAMETER, как будто это просто $ {PARAMETER}. Если вы опускаете: (двоеточие), как показано во второй форме, значение по умолчанию используется только , когда параметр был отменен, а не когда он был пуст.

echo "Your home directory is: ${HOME:-/home/$USER}." 
echo "${HOME:-/home/$USER} will be used to store your personal data." 

Если HOME не установлен или пуст, каждый раз вы хотите напечатать что-то полезно, вам нужно поместить этот синтаксис параметра в.

#!/bin/bash 

read -p "Enter your gender (just press ENTER to not tell us): " GENDER 
echo "Your gender is ${GENDER:-a secret}." 

Это напечатает «Ваш пол является секретом. " когда вы не вводите пол . Обратите внимание, что значение по умолчанию используется для времени расширения, это не присвоено параметру.

Смежные вопросы