Bash- ${line,,}: неправильная замена

#bash #shell #unix #scripting

#bash #оболочка #unix #сценарии

Вопрос:

У меня проблемы со строчными буквами слов из текстового файла. Я работаю на Bash 4.4 (OS X), и это должно быть возможно сделать, используя две запятые после переменной, но это выдает ошибку:

${строка,,}: неправильная замена

Вот мой простой код:

 filename=textfile.txt
while read -r line
do
        word="${line,,}"
        echo "$word"
done < "$filename"
  

Есть идеи? Большое спасибо!

Комментарии:

1. ваш код работает в моей среде Linux, которая имеет bash 4.3.46, как вы подтвердили, что используете 4.4? попробуйте поместить echo $BASH_VERSION в свой код, чтобы проверить версию.

2. получил ту же ошибку в 3.1.7(1)-release bash. Однако это сработало для более поздних версий.

3. Проблема в этом. Когда я запускаю command, bash --version она возвращается version 4.4.0(1)-release , но когда я запускаю command ($BASH_VERSION) в коде, она возвращает 3.2.57(1) какие-либо идеи? Спасибо!

4. возможно, в вашем скрипте используется #!/bin/sh ? в качестве исправления вам следует изменить его на #!/bin/bash , поскольку первая является минимально совместимой с POSIX оболочкой, которая, как ожидается, будет иметь только меньшие функции

5. я попытался запустить command echo $BASH_VERSION в терминале вместо VIM, и он показывает 4.4.0, поэтому я думаю, что vim работает на неправильной версии bash, но это странно.

Ответ №1:

Я нашел решение для своего ответа, поэтому кому-то может быть полезно опубликовать его там. Когда я обновил bash, он обновился только до usr каталога, поэтому при запуске #!usr/local/bin/bash он будет работать правильно. Для глобального обновления bash смотрите это руководство:http://clubmate.fi/upgrade-to-bash-4-in-mac-os-x /