Проблема заключается в том, что оболочка выполняет раскрытие фигурных скобок (, которое обрабатывает{...,...}
)перед подстановкой команды (в часть $(...)
. )Таким образом, после того, как ваш seq
будет развернут, оболочка не будет повторно -оценивать {01,02}
и оставит его литералом.
Необходимо добавить eval
, чтобы он повторно -оценивал выражение после выполнения подстановки команд:
$ eval "ls test/*{$(seq -s, -f "%02g" 1 2)}*"
В этом случае подстановка команды будет выполнена первой, что приведет к строке ls test/*{01,02}*
, а eval
попросит оболочку интерпретировать это как команду, которая затем выполнит подстановку скобок и подстановок, что приведет к список файлов, которые вы ожидаете.
Я не вижу причин для 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
Не тестировался с bc
, так как мой bc
не имеет -e
, однако они должны работать.
echo "283" | xargs echo 123
можно заменить на.echo 123 "$(echo "283")"
Итак, для вашего примера
bc -l -e "scale=2; l( x )/l(10)" "$(echo "283")"