Мне нужно прочитать значение из терминала в скрипте bash. Я хотел бы иметь возможность предоставить значение по умолчанию, которое пользователь может изменить.
# Please enter your name: Ricardo^
В этом скрипте приглашение «Пожалуйста, введите ваше имя»: значение по умолчанию - «Рикардо», а курсор будет после значения по умолчанию. Есть ли способ сделать это в скрипте bash?
input
и затем использованиеname=${input:-$name}
.name=${!input:-$name}
делать?$1
становится${1:-some_default_string}
источник
-e
видимому, необходимо разрешить-i
фактически работатьВ Bash 4:
Это имя отображается после приглашения, как это:
с курсором в конце имени и позволяет пользователю редактировать его. Последняя строка является необязательной и заставляет имя быть исходным по умолчанию, если пользователь удаляет ввод или значение по умолчанию (отправляя нулевое значение).
источник
name
вместоinput
вread
команде.$name
сохраняется, если пользователь удаляет предложенное значение (и, следовательно, вводит пустую строку). Все зависит от того, что вам нужно. Я сказал так же в своем ответе. Вы правы, однако, что я мог бы быть более явным и сказал, что, если бы необязательная строка не использовалась, переменная могла бы бытьname
.Код:
Образец прогона:
источник
Я нашел этот вопрос, ища способ представить что-то вроде:
Используя приведенные выше примеры, я вывел это:
Надеюсь, что это помогает кому-то не придумывать логику, если они сталкиваются с той же проблемой
источник
Я только что использовал этот шаблон, который я предпочитаю:
источник
Установить значение по умолчанию; распечатать его; прочитать новое значение; если есть новое значение, используйте его вместо значения по умолчанию. Существуют (или были) некоторые различия между оболочками и системами в том, как подавить перевод строки в конце приглашения. Нотация \ c, кажется, работает на MacOS X 10.6.3 с 3.x bash и работает на большинстве вариантов Unix, производных от System V, с использованием оболочек Bourne или Korn.
Также обратите внимание, что пользователь, вероятно, не осознает, что происходит за кулисами; их новые данные будут введены после того, как имя уже на экране. Может быть, лучше отформатировать его:
источник
printf
более портативен, чемecho
if (test -z "$xxx"); ...
' и другими C-оболочками.\c
, так как он также поддерживаетecho -n
! Тем не менее, вы должны добавить,-e
чтобы получить эхо Bash для интерпретации побегов. Я думаю,\c
что для вещей, оставшихся недосказанными:echo -e "Syntax slightly off\c, but I've learned so much from what you've shared. Thanks, @JonathanLeffler!"
$ bash --version
GNU bash, version 4.3.33(0)-release
a) «Я хотел бы иметь возможность предоставить значение по умолчанию, которое пользователь может изменить». Вашecho "Please enter your name: $name \c"
не позволяет мне редактировать значение по умолчанию. б) "и курсор будет после значения по умолчанию." Также не соответствует действительности ... Ответ @Paused до дальнейшего уведомления. выполняет оба требования.источник
Параметр -e и -t не работают вместе. Я попробовал некоторые выражения, и в результате был следующий фрагмент кода:
источник
;)
. Это разрешено на ТАК! но мы не хотим загрязнять другие вопросы несвязанными вещами.