$(/ bin / printf -6)を取得して-6を返し、-6がオプションだとは思わない
質問
次の行を持つ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 をサポートしますcode>:
$ busybox echo -n "a"
a
$ busybox echo -n -6
-6
所属していません StackOverflow