Я предлагаю вам использовать этот txt2re для создания regex
, которые соответствуют тому, что вы хотите.
Для вас скрипт:
for f in $float_numbers ; do
if [[ $f =~ ^[+-]?[0-9]+\.?[0-9]*$ ]]; then
echo "****f is $f ****"
fi
done
Rexeplanation:
^ # Match start of string
[-+]? # Match a leading + or - (optional)
[0-9]+ # Match one or more digit
\.? # Match a literal . (optional, escaped)
[0-9]* # Match zero or more digits
$ # Match the end of the string
И это сценарий perl
, сгенерированный предыдущим сайтом, который соответствует плавающим числам
#!/usr/bin/perl
# URL that generated this code:
# http://txt2re.com/index.php3?s=100.3&1
$txt='100.3';
$re1='([+-]?\\d*\\.\\d+)'; # Float 1
$re=$re1;
if ($txt =~ m/$re/is)
{
$float1=$1;
print "($float1) \n";
}
#-----
# Paste the code into a new perl file. Then in Unix:
# $ perl x.pl
#-----
У меня такой динамический текст подсказки, и нет проблем с опережающим вводом. Но вместо того, чтобы встраивать подстановку процесса непосредственно в PS1
, я использую PROMPT_COMMAND
для вызова методов настройки. Они создают соответствующий динамический текст, который сохраняется в переменных, а затем эти переменные встраиваются в PS1
.
Попробуй так...
export ps1_head_text
build_prompt() {
export PS1="\${ps1_head_text}..."
}
ps1_head() {
if (( $(cursor_col) > 1 )); then
ps1_head_text=$'\n'╭-
else
ps1_head_text=╭-
fi
}
export PROMPT_COMMAND=ps1_head
Я сделал это именно так, потому что у меня были проблемы с подстановкой процессов (, хотя я не помню, было ли это опережение ввода или какая-то другая проблема ).
Редактировать:Теперь, когда я думаю об этом, у вас могут быть проблемы с синхронизацией... если PROMPT_COMMAND
вызывается во время, которое препятствует правильному чтению позиции курсора. Если это произойдет, вы, вероятно, находитесь в лодке «использовать zsh». Но попробуйте.
Обновление:Согласно комментарию от dave _thompson _085 чтение ответа на создание escape-последовательности (для печати позиции курсора )может конфликтовать с опережающим вводом.
Это имеет смысл, так как чтение происходит в той же оболочке, где вводится текст с опережением. Так что, если вы не сделаете это в той же оболочке? Помогает ли окружить его скобками, чтобы поместить его в подоболочку? Как насчет перенаправления ответа терминала (, например. в файл или канал или что-то еще )и читать оттуда?
Похоже, есть способ решить эту проблему, поэтому я швыряю кое-что об стену, чтобы посмотреть, что прилипнет.