بورن شل مسألة واحدة ، سؤال مزدوج و backquote

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

  •  21-09-2019
  •  | 
  •  

سؤال

/! بن/ش

   if [ "`echo $desc $status | awk -F"," '{print $3}' | awk -F" " '{print $1}' | sed '/^$/d'`" != "OK" ]; then
        echo "howdy dody"
   fi

echo $desc $status | awk -F"," '{print $3}' | awk -F" " '{print $1}' | sed '/^$/d'

أولاً ، إذا لم يتم تشغيل الشرط ، فأنا أظن أنه بسبب اقتباس غير صحيح ، لكن لا يمكنني معرفة ذلك.

شكرا مقدما على أي مساعدة.

هل كانت مفيدة؟

المحلول

إذا كنت تستخدم باش ، أوصي $(...) بدلا من الربعات الخلفية. ما رسائل الخطأ التي تحصل عليها؟ أظن أن -F"," لا يتم نقل خيار AWK بشكل صحيح. محاولة الإدراج \ للهروب من علامات الاقتباس.

نصائح أخرى

يمكنك أيضًا استخدام علامات اقتباس واحدة حول الوسيطة إلى -F الخيار كما لديك حول الحجج الأخرى:

if [ "`echo $desc $status | awk -F',' '{print $3}' | awk -F' ' '{print $1}' | sed '/^$/d'`" != "OK" ]; then

من الأسهل بكثير كتابة الاختبار إذا قمت بلفه في وظيفة:

mytest()
{
  echo "$1 $2" \
  | awk -F"," -v arg3="$3" '{print arg3}' \
  | awk -F" " -v arg1="$1" '{print arg1}' \
  | sed '/^$/d'
}

بهذه الطريقة ، يمكنك التحقق من أنه يعمل بشكل صحيح. بمجرد اكتساب هذه الثقة

if [ "$(mytest "$desc" "$status")" != "OK" ]; then
        echo "howdy doody"
fi

أو

if mytest "$desc" "$status" | grep -q -v '^OK$'; then
  echo "howdy doody"
fi

للوهلة الأولى ، قد ترغب في محاولة الهروب من بعض الاقتباسات المزدوجة:

   if [ "`echo $desc $status | awk -F"," '{print $3}' | awk -F" " '{print $1}' | sed '/^$/d'`" != "OK" ]; then
        echo "howdy dody"
   fi

ل

   if [ "`echo $desc $status | awk -F\",\" '{print $3}' | awk -F\" \" '{print $1}' | sed '/^$/d'`" != "OK" ]; then
        echo "howdy doody"
   fi

من المؤكد أن الهروب من الاقتباسات المزدوجة هو فكرة جيدة ، ولكن يبدو أن 3 دولارات ويهدف دولار واحد إلى تفسيره بواسطة AWK. يتم تفسيرها بواسطة قذيتك بدلاً من ذلك. ربما تريد الهروب من "$". (من الممكن أن يكون لديك قيم ذات معنى مقابل 1 دولار و 3 دولارات في القشرة ، ولكن ليس من المحتمل.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top