Синтаксис, который вы использовали:
var1=10.123 var2=mss printf "%.1f%4.2s\n" $var1 $var2
просто означает: вызовите printf
и поместите две переменные в окружение printf
И дайте фактическим значениям $var1
и $var2
, как определено в вызывающей оболочке в качестве аргумента printf
.Причина: не printf
оценивает $var1
и $var2
, а вызывающую оболочку.
Итак: если среда вашей оболочки не содержит var1
и var2
, то вызов эквивалентен
var1=10.123 var2=mss printf "%.1f%4.2s\n"
Если - с другой стороны - оболочка уже знает эти переменные:
var1=foo
var2=bar
, тогда вызов эквивалентен:
var1=10.123 var2=mss printf "%.1f%4.2s\n" foo bar
Итак, я предполагаю, что выустановили для этих переменных какое-то значение в этом «одном терминале».
Возможное решение:
( var1=10.123; var2=mss; printf "%.1f%4.2s\n" $var1 $var2 )
Но:
Переменные будутвиден только printf
.Поэтому самое простое решение - полностью их опустить:
printf "%.1f%4.2s\n" 10.123 mss