#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 /