4

次の行を持つbashシェルスクリプトがあります。

g=$(/bin/printf ${i})

${i}のようなものが含まれている場合、オプションが渡されたと考えます-6printfオプションを認識しないため、エラーが発生します。

${i}引用符で囲んだ場合でもprintf、オプションが渡されたと考えられます。

g=$(/bin/printf "${i}")

引用符をエスケープすると、変数$gは " " を保持しますが、-6これも私が望むものではありません。

g=$(/bin/printf \"${i}\") 

ダッシュ (-) をエスケープする距離はありますか。

printf は BusyBox アプリです

4

4 に答える 4

13

ほとんどの GNU プログラム--は、それ以降のすべての引数がオプションではないことをプログラムに伝える区切り文字としての使用をサポートしています。例えば

$ printf -- -6
-6
于 2009-10-23T14:58:43.893 に答える
7

printf実際のフォーマット文字列で呼び出したらどうなるでしょうか?

$ printf "%d\n" -6
-6
$ /sbin/busybox printf "%d\n" -6
-6
$

これは、GNU coreutils と busybox の printf の両方で動作するようです。

于 2009-10-23T15:07:03.687 に答える
0

使用する必要があります

printf -- -6
于 2009-10-23T15:00:08.930 に答える
0

この方法で数値以外の引数を指定すると、エラー メッセージが表示されます。

$ busybox printf "%d" "a"
a: conversion error
-1

ただし、数値引数と数値以外の引数の両方で使用できます%s(書式設定を行う必要がない限り)。

$ busybox printf "%s" "a"
a
$ busybox printf "%s" -6
-6

の書式設定機能を使用しておらprintfず、改行なしで値を出力する必要がある場合、busybox のechoコマンドは以下をサポートします-n

$ busybox echo -n "a"
a
$ busybox echo -n -6
-6
于 2009-10-23T18:18:32.833 に答える