Shell - использование переменной с тире
Я читал tcollector файл init.sh здесь: https://github.com/OpenTSDB/tcollector/blob/master/rpm/initd.sh#L25
что означает тире в строке 25TCOLLECTOR=${TCOLLECTOR-/usr/local/tcollector/tcollector.py}
?
(Первоначально я думал, что он просто назначает путь после тире для TCOLLECTOR; однако мои тесты показывают два разных результата:
- если TCOLLECTOR уже было присвоено значение, оно сохранит это значение
- иначе TCOLLECTOR будет иметь значение "/usr/local/tcollector/tcollector.py"
Я также посмотрел на использование "-", но это все о STDIN и STDOUT... Я не понял, как они связаны с моим вопросом.)
Спасибо.
1 ответ
Это пример расширения параметров; общее разнообразие POSIX задокументировано здесь, и вы можете прочитать о воплощении Bash здесь.
По сути, расширение со знаком минус делает именно то, что вы описали: ${anyVariable-anyExpression}
расширяется до значения $anyVariable
если он установлен, но если он не установлен, то он расширяется до anyExpression
,
Знак плюс делает в точности наоборот: ${anyVariable+anyExpression}
расширяется до anyExpression
если $anyVariable
имеет значение и ничего (пустая строка), если оно не установлено.
Есть также несколько других вариантов.