كيف يمكنني الحصول على $ (/ بن / printf -6) للعودة -6 ولا أعتقد -6 هو خيار

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

  •  06-07-2019
  •  | 
  •  

سؤال

ولدي باش قذيفة النصي الذي يحتوي على السطر:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top