Подстановка, которую вы используете, не является базовой функцией POSIX (см. здесь , в разделе 2.6.2 Расширение параметров), и dash
не реализует ее.
Но вы можете сделать это с любым из ряда внешних помощников;Вот пример использования sed
:
PORT="-p7777"
CAPITOLPORT=$(printf '%s\n' "$PORT" | sed 's/p/P/')
printf '%s\n' "$CAPITOLPORT"
Кстати, обратите внимание, что я использую printf '%s\n'
вместо echo
- это потому, что некоторые реализации echo
делают непредсказуемые вещи, когда их первый аргументначинается с "-".printf
немного сложнее в использовании (вам нужна строка формата, в данном случае %s\n
), но гораздо надежнее.Я также заключаю в двойные кавычки все ссылки на переменные ("$PORT"
вместо просто $PORT
), чтобы предотвратить непредвиденный синтаксический анализ.
Я бы также рекомендовал переключаться на переменные в нижнем или смешанном регистре.Существует большое количество переменных all-caps, которые имеют специальные значения, и если вы случайно используете одно из них, это может вызвать проблемы.