@ Ответ DiegoTorresMilano, вероятно, в целом лучше, но если вы хотите сделать это в bash, главное, что вам нужно сделать, это заключить в кавычки ссылки на переменные. Без двойных кавычек вокруг них bash (и большинство оболочек, кроме zsh) разбивает переменные на «слова», а также расширяет все, что выглядит как подстановочное выражение, в список совпадающих имен файлов. Вы почти никогда не хотите этого, поэтому используйте двойные кавычки. В вашем случае есть два места, в которых они нужны: около $line
здесь:
index=$(awk -v var="$line" 'BEGIN {print index(var, "dailyratevalue") }')
и здесь:
echo "$line" | cut -c $index-$end | tail -c 4 | tr ',' '.' > selic
Обратите внимание, что вам не нужны двойные кавычки вокруг выражений $( )
, потому что они находятся справа от оператора присваивания, и это не подлежит разделению слов и расширению по шаблону. Если бы они произошли где-то еще, вам, вероятно, тоже понадобятся двойные кавычки.
Кстати, shellcheck.net действительно хорошо показывает типичные ошибки, подобные этой, поэтому я рекомендую запускать через них ваши скрипты (даже если они кажутся работающими правильно).