Это может быть дубликат bash пользовательский ввод, если, но ответы не решили мою проблему, поэтому я думаю, что есть что-то еще.
У меня есть следующий скрипт:
#!/bin/bash
echo "Do that? [Y,n]"
read input
if [[ $input == "Y" || $input == "y" ]]; then
echo "do that"
else
echo "don't do that"
fi
и когда я делаю sh basic-if.sh
Также у меня есть
#!/bin/bash
read -n1 -p "Do that? [y,n]" doit
case $doit in
y|Y) echo yes ;;
n|N) echo no ;;
*) echo dont know ;;
esac
и когда я делаю sh basic-if2.sh
Я думаю, что у моего bash есть проблема, потому что у других пользователей не было таких проблем при запуске этих примеров. Спасибо





Запуск скрипта с помощью sh scriptname переопределяет любой интерпретатор по умолчанию, установленный внутри вашего скрипта. В вашем случае оболочка bourne (sh) запускает скрипт вместо оболочки bourne Again (bash). sh не поддерживает [[, а команда read в форме, совместимой с POSIX, не поддерживает флаг -n.
По всей вероятности, ваш sh в вашей системе не имеет символической ссылки на bash и работает сам по себе как оболочка, совместимая с POSIX. Исправьте проблему, запустив
bash basic-if2.sh
или запустите его с ./ перед именем скрипта, заставив систему искать интерпретатор в первой строке файла (#!/bin/bash). Вместо того, чтобы исправлять интерпретатор, вы также можете сделать #!/usr/bin/env bash, чтобы ОС искала, где bash установлена, и выполнялась с этим.
chmod a+x basic-if2.sh
./basic-if2.sh
Вы также можете увидеть, есть ли у ls -lrth /bin/sh символическая ссылка на dash, которая является минимальной оболочкой, совместимой с POSIX, доступной в системах Debian.
@Delfin: я не вижу их в вашем сценарии выше? Как вы печатаете эти цвета?
Я не размещал его для минимального рабочего примера. Но я делаю это так: echo "\e[31m Example \e[0m"
@Delfin: Это потому, что echo по умолчанию не распознает цветовые коды ANSI, не выполняя echo -e. Но последний не переносим в системах POSIX. Рекомендуем использовать printf '\e[31m Example \e[0m\n'
О, это устранило проблему, но теперь она создала другую, изменение цвета в шрифтах
\e[31m Example \e[0mне распознается