Ответ 1
Потому что :-
- синтаксис расширения параметров для "Использовать значения по умолчанию".
Из документация:
Если не выполняется расширение подстроки, используя описанную форму ниже (например, ':-), Bash тесты для параметра, который отключен или нуль.
Итак, выполнив ${STRING:-4}
, вы действительно просите Bash расширить
STRING
и если он не установлен (никогда не назначался раньше) или null
(нулевая строка, напечатанная как ''
), она заменит расширение на
4
. В вашем примере STRING
установлен и, следовательно, расширен до его значения.
Как говорится в другом ответе, вам нужно вызвать поведение по умолчанию, руководство указывает его:
Обратите внимание, что отрицательное смещение должно быть отделено от двоеточия на хотя бы одно пространство, чтобы избежать путаницы с: - расширением.
Например:
${STRING:(-4)}
${STRING: -4}