Shell - использование переменной с тире

Я читал tcollector файл init.sh здесь: https://github.com/OpenTSDB/tcollector/blob/master/rpm/initd.sh#L25

что означает тире в строке 25TCOLLECTOR=${TCOLLECTOR-/usr/local/tcollector/tcollector.py}?

(Первоначально я думал, что он просто назначает путь после тире для TCOLLECTOR; однако мои тесты показывают два разных результата:

  1. если TCOLLECTOR уже было присвоено значение, оно сохранит это значение
  2. иначе TCOLLECTOR будет иметь значение "/usr/local/tcollector/tcollector.py"

Я также посмотрел на использование "-", но это все о STDIN и STDOUT... Я не понял, как они связаны с моим вопросом.)

Спасибо.

1 ответ

Решение

Это пример расширения параметров; общее разнообразие POSIX задокументировано здесь, и вы можете прочитать о воплощении Bash здесь.

По сути, расширение со знаком минус делает именно то, что вы описали: ${anyVariable-anyExpression} расширяется до значения $anyVariable если он установлен, но если он не установлен, то он расширяется до anyExpression,

Знак плюс делает в точности наоборот: ${anyVariable+anyExpression} расширяется до anyExpression если $anyVariable имеет значение и ничего (пустая строка), если оно не установлено.

Есть также несколько других вариантов.

Другие вопросы по тегам