4

Я использую OS X Yosemite. Мне нужно использовать ассоциативные массивы в bash, поэтому я решил использовать Homebrew для обновления bash до 4.x. Я выполнил следующие шаги:

  1. brew install bash
  2. Затем я добавил /usr/local/bin/bash в /etc/shells и перезагрузил для хорошей меры.
  3. chsh -s /usr/local/bin/bash
  4. Для хорошей меры я вышел из системы и снова вошел в систему, хотя простого перезапуска терминала, вероятно, было бы достаточно.

Когда я открываю Терминал, все кажется хорошо. Если я скажу $SHELL --version я получу GNU bash, version 4.3.30(1)-release (x86_64-apple-darwin14.0.0) . К сожалению, если я скажу echo $BASH_VERSION я получу 3.2.53(1)-release . Кроме того, я не могу использовать какие-либо из расширенных функций Bash 4.x, например, ассоциативные массивы, например, declare -A foo говорит -bash: declare: -A: invalid option .

Интересно, что echo $0 говорит -bash .

Что тут происходит? Как мне получить мои ассоциативные массивы?

1 ответ1

4

У меня была похожая проблема, и она оказалась с моим #! дорожка. Убедитесь, что вы не указываете на:

#!/bin/bash

но в:

#!/usr/local/bin/bash

Если вы хотите продолжать использовать #!/bin/bash вверху, вы можете вместо этого сделать:

sudo ln -s /usr/local/bin/bash /bin/bash

Обновить:

Если у вашего $PATH есть /url/local/bin перед /bin и /usr/bin вы можете просто сделать:

#!/usr/bin/env bash

для решения, которое менее специфично для настройки OS X/Homebrew.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .