Как оценить объединенную строку, включающую математику, в сценарии bash

➜ codetv_static # docker run ubuntu: 10.04 / bin / echo 'Howdy!' Невозможно найти образ 'ubuntu: 10.04' локально { {1}} 10.04: Извлечение из библиотеки / ubuntu a3ed95caeb02: Извлечение завершено 86b54f4b6a4e: Извлечение завершено Дайджест: sha256: f6695b2d24dd2e1da0a79fa72459e33505dae79039c5status {{1} ubuntu: 10.04 Привет!

-1
30.05.2017, 04:37
2 ответа

Используйте двойные кавычки для ссылок на переменные, например $_FILENAME. Без двойных кавычек оболочка попытается разделить содержимое переменной на несколько «слов», а также развернуть все найденные файловые глобы (выражения с подстановочными знаками). такие выражения, как [21-40] являются глобусами (это соответствует любым файлам с именами "2", "1" до "4" или "0"). Если у вас есть файлы с любыми совпадающими именами в текущем каталоге, вместо выражения в квадратных скобках будет напечатан список файлов. Таким образом, все, что вам нужно сделать, это использовать:

echo "$_FILENAME"

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

4
29.04.2021, 00:00

Гордон правильно описал проблемы с вашим кодом в своем ответе. Я даю вам альтернативную версию вашего кода, как я бы написал ее:

echo 'First file'

for (( i = 20; i < 100; i += 20 )); do
    printf '[%d-%d]\n' "$(( i + 1 ))" "$(( i + 20 ))"
done

Использование printf, как правило, безопаснее для вывода пользовательских или переменных данных. См., например. Почему printf лучше, чем echo?

Поскольку интервалы являются регулярными, цикл for в стиле C, возможно, лучше подходит, чем явное перечисление начального номера каждого интервала.

2
29.04.2021, 00:00

Теги

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