Читать переменную в bash со значением по умолчанию

Если все, что вы хотите сделать, это найти многобайтовое безопасное положение H try mb_strpos ()

mb_internal_encoding('UTF-8');
$str = "\xC2\xA1Hola!";
$pos = mb_strpos($str, 'H');
echo $str."\n";
echo $pos."\n";
echo mb_substr($str,$pos,1)."\n";

Выход:

¡Hola!
1
H
150
задан Ricardo Marimon 15 April 2010 в 03:41
поделиться

3 ответа

вы можете использовать расширение параметра например,

read -p "Enter your name [Richard]: " name
name=${name:-Richard}
echo $name

Включение значения по умолчанию в подсказку между скобками - довольно распространенное соглашение.

226
ответ дан 23 November 2019 в 21:16
поделиться

В Bash 4:

name="Ricardo"
read -e -i "$name" -p "Please enter your name: " input
name="${input:-$name}"

Это отображает имя после приглашения, например:

Please enter your name: Ricardo

с курсором в конце имени и позволяет пользователю редактировать его. Последняя строка является необязательной и заставляет имя быть исходным по умолчанию, если пользователь стирает ввод или значение по умолчанию (отправляя null).

46
ответ дан 23 November 2019 в 21:16
поделиться
name=Ricardo
echo "Please enter your name: $name \c"
read newname
[ -n "$newname" ] && name=$newname

Установить значение по умолчанию; распечатать; прочитать новое значение; если есть новое значение, используйте его вместо значения по умолчанию. Между оболочками и системами есть (или были) некоторые различия в том, как подавлять перевод строки в конце приглашения. Обозначение '\ c', похоже, работает в MacOS X 10.6.3 с bash 3.x и работает в большинстве вариантов Unix, производных от System V, с использованием оболочек Bourne или Korn.

Также обратите внимание, что пользователь, вероятно, не осознает, что происходит за кулисами; их новые данные будут введены после имени, уже отображаемого на экране. Возможно, лучше отформатировать его:

echo "Please enter your name ($name): \c"
6
ответ дан 23 November 2019 в 21:16
поделиться