$(/ bin / printf -6)を取得して-6を返し、-6がオプションだとは思わない

StackOverflow https://stackoverflow.com/questions/1614028

  •  06-07-2019
  •  | 
  •  

質問

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

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

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

$ {i} を引用符で囲む場合、 printf はまだオプションが渡されていると考えます。

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

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

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

ダッシュ(-)をエスケープするためにそこにいます。

printfはBusyBoxアプリです

役に立ちましたか?

解決

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

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

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

他のヒント

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

$ printf -- -6
-6

使用する必要があります

printf -- -6

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

$ 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top