كيف يمكنني الحصول على $ (/ بن / printf -6) للعودة -6 ولا أعتقد -6 هو خيار
سؤال
ولدي باش قذيفة النصي الذي يحتوي على السطر:
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
$
وهذا يعمل مع كل coreutils جنو "وBUSYBOX" printf، على ما يبدو.
نصائح أخرى
ومعظم برامج جنو دعم استخدام --
كمحدد لنقول للبرنامج أن جميع الحجج أخرى ليست الخيارات. على سبيل المثال
$ 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
وتحتاج لإخراج القيمة دون سطر جديد، ويدعم قيادة echo
BUSYBOX في -n
:
$ busybox echo -n "a"
a
$ busybox echo -n -6
-6