Как элегантно передать число в bc?

Проблема заключается в том, что оболочка выполняет раскрытие фигурных скобок (, которое обрабатывает{...,...})перед подстановкой команды (в часть $(...). )Таким образом, после того, как ваш seqбудет развернут, оболочка не будет повторно -оценивать {01,02}и оставит его литералом.

Необходимо добавить eval, чтобы он повторно -оценивал выражение после выполнения подстановки команд:

$ eval "ls test/*{$(seq -s, -f "%02g" 1 2)}*"

В этом случае подстановка команды будет выполнена первой, что приведет к строке ls test/*{01,02}*, а evalпопросит оболочку интерпретировать это как команду, которая затем выполнит подстановку скобок и подстановок, что приведет к список файлов, которые вы ожидаете.

1
08.01.2021, 21:39
2 ответа

Я не вижу причин для xargsздесь:

printf 'scale=2; l(%s)/l(10)\n' "283" | bc -l

Варианты чтения номера из файла:

awk '{ printf "l(%s)/l(10)\n", $1 }' file | bc -l -e 'scale=2'

(это предполагает наличие bcс-e)или без bcвообще:

awk '{ printf "%.2f\n", log($1)/log(10) }' file
2
18.03.2021, 22:37

Не тестировался с bc, так как мой bcне имеет -e, однако они должны работать.

echo "283" | xargs echo 123можно заменить на.echo 123 "$(echo "283")"

Итак, для вашего примера

bc -l -e "scale=2; l( x )/l(10)" "$(echo "283")"

0
18.03.2021, 22:37

Теги

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