Как заставить мой терминал bash запоминать команды

Вы правы в том, что эта математика не работает в bash и большинстве других оболочек, поскольку они следуют соглашению C, согласно которому число, начинающееся с 0, является восьмеричным , а не десятичным :

.
$ echo "$((124000000 - 097000000))"
bash: 124000000 - 097000000: value too great for base (error token is "097000000")

Одно из решений состоит в том, чтобы правильно идентифицировать числа, которые нужно бить как базовые. -10:

$ echo "$((10#124000000 - 10#097000000))"
27000000

Проблема в том, что без префикса 10#bash предполагает, что число, начинающееся с нуля, является восьмеричным.

В качестве альтернативы используйтеbc:

$ echo "124000000 - 097000000" | bc -l
27000000

Или используйте awk:

$ echo "124000000 097000000" | awk '{print $1-$2}'
27000000

Объединение математики и printf:

$ g=124000000
$ h=097000000
$ printf "Total time difference: %i milli seconds\n" "$(echo "$g - $h" | bc -l )"
Total time difference: 27000000 milli seconds

Или,

$ g=124000000
$ h=097000000
$ echo "$g $h" | awk '{printf "Total time difference: %i milliseconds\n",$1-$2}'; )
Total time difference: 27000000 milli seconds

Документация

Изman bash:

Constants with a leading 0 are interpreted as octal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, numbers take the form [base#]n, where the optional base is a decimal number between 2 and 64 representing the arithmetic base, and n is a number in that base.

Сочетание математики и даты

$ echo "$(( $(date -d '14:00:13.124' '+10#%s%N') - $(date -d '14:00:13.097' '+10#%s%N') ))"
27000000

Если мы хотим преобразовать наносекунды в миллисекунды:

$ echo "$(( ($(date -d '14:00:13.124' '+10#%s%N') - $(date -d '14:00:13.097' '+10#%s%N'))/1000000 ))"
27

$ echo "$(( ($(date -d '14:00:05.320' '+10#%s%N') - $(date -d '14:00:04.909' '+10#%s%N'))/1000000 ))"
411
0
19.09.2021, 22:04
2 ответа

Чтобы расширить мой комментарий, вам нужно сменить оболочку на zsh и установить автоподсказки zsh -. Сначала установите zsh и git с помощью sudo apt-get install zsh git. Затем запустите chshи при появлении запроса введите /bin/zsh. В-третьих, введите git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions, чтобы клонировать репозиторий автопредложений zsh -. Наконец, введите echo "source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh" >> ~/.zshrcи либо введите source ~/.zshrc, либо после этого запустите новую оболочку.

1
22.09.2021, 05:31

Использовать пользовательскую оболочку:Вы можете изменить оболочку по умолчанию на ту, которая предоставляет такую ​​функцию:Fish shell или ZSH с дополнением zsh -autosuggestion . Имейте в виду, что оболочки отличаются , изменение оболочки на Fish или ZSH может изменить некоторые из ваших команд или сценариев .

Поиск с помощью Ctrl -R:Если вы не можете изменить свою оболочку (или если вы не хотите ), вы можете выполнить поиск в своей истории, используя Ctrl -R. Это отличается от -завершения мухи -, которое вы ищете, но может быть полезной альтернативой. См. Как переключаться между обратным -и -поиском в BASH? .

0
22.09.2021, 08:00

Теги

Похожие вопросы