printf "Hello %d %i %f %F %g %G\n" 1 2 3 4 5 6 printf "%x %X %o %llu\n" 10 11 8 -1 # %a has OS-dependent output - see #1139 #printf "%a %A\n" 14 15 printf "%c %s\n" a hello printf "%c%c%c\n" hello … o printf "%e %E\n" 5 6 printf "%20d\n" 50 printf "%-20d%d\n" 5 10 printf "%*d\n" 10 100 printf "%%\"\\\n" printf "%s\b%s\n" x y printf "abc\rdef\n" printf "Msg1\fMsg2\n" printf "foo\vbar\vbaz\n" printf "\111 \x50 \u0051 \U00000052" echo echo "Test escapes" # \c escape means "stop printing" printf 'a\cb' echo # Bogus printf specifier, should produce no stdout printf "%5" 10 2>/dev/null # Octal escapes produce literal bytes, not characters # \376 is 0xFE printf '\376' | display_bytes # Verify that floating point conversions and output work correctly with # different combinations of locales and floating point strings. See issue # #3334. This starts by assuming an locale using english conventions. printf '%e\n' "1.23" # should succeed, output should be 1.230000e+00 printf '%e\n' "2,34" # should fail # Try to use one of several locales that use a comma as the decimal mark # rather than the period used in english speaking locales. If we don't find # one installed we simply don't run this test. set -l locales (locale -a) set -l acceptable_locales bg_BG de_DE es_ES fr_FR ru_RU set -l numeric_locale for locale in {$acceptable_locales}.{UTF-8,UTF8} if string match -i -q $locale $locales set numeric_locale $locale break end end if set -q numeric_locale[1] set -x LC_NUMERIC $numeric_locale printf '%e\n' "3,45" # should succeed, output should be 3,450000e+00 printf '%e\n' "4.56" # should succeed, output should be 4,560000e+00 else echo '3,450000e+00' echo '4,560000e+00' end # Verify long long ints are handled correctly. See issue #3352. printf 'long hex1 %x\n' 498216206234 printf 'long hex2 %X\n' 498216206234 printf 'long hex3 %X\n' 0xABCDEF1234567890 printf 'long hex4 %X\n' 0xABCDEF12345678901 printf 'long decimal %d\n' 498216206594 printf 'long signed %d\n' -498216206595 printf 'long signed to unsigned %u\n' -498216206596