[bash] كيفية تعيين متغير على إخراج أمر في باش؟



Answers

تحديث (2018): الطريق الصحيح هو

$(sudo run command)

أنت تستخدم النوع الخطأ من الفاصلة العليا. أنت بحاجة إلى ` لا ' . تسمى هذه الشخصية "backticks" (أو "لهجة خطيرة").

مثله:

#!/bin/bash

VAR1="$1"
VAR2="$2"

MOREF=`sudo run command against "$VAR1" | grep name | cut -c7-`

echo "$MOREF"
Question

لدي برنامج نصي بسيط جدًا يشبه ما يلي:

#!/bin/bash

VAR1="$1"    
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'

echo $MOREF

عندما أقوم بتشغيل هذا البرنامج النصي من سطر الأوامر ونقوم بتمرير الوسيطات ، لن أحصل على أي إخراج. ومع ذلك ، عند تشغيل الأوامر المتضمنة في متغير $MOREF ، يمكنني الحصول على الإخراج.

أود أن أعرف كيف يمكن للمرء أن يأخذ نتائج الأمر الذي يحتاج إلى أن يتم تشغيله داخل برنامج نصي ، حفظه إلى متغير ، ثم إخراج هذا المتغير على الشاشة؟




عند تعيين متغير ، تأكد من عدم وجود مسافات قبل و / أو بعد علامة = . قضيت حرفيا ساعة في محاولة لمعرفة ذلك ، ومحاولة كل أنواع الحلول! هذا ليس رائعًا.

صيح:

WTFF=`echo "stuff"`
echo "Example: $WTFF"

سيخفق مع الخطأ: (الأشياء: غير موجودة أو مشابهة)

WTFF= `echo "stuff"`
echo "Example: $WTFF"



في ما يلي طريقتان أخريان: يُرجى الانتباه إلى أن المساحة مهمة جدًا في bash حتى إذا كنت تريد تشغيل الأمر كما هو دون إدخال مسافات أكثر.

  1. يلي يعيّن harshil إلى L ثم يطبعه

    L=$"harshil"
    echo "$L"
    
  2. يلي يعين الإخراج من الأمر TR إلى L2. يتم تشغيل tr على متغير L1 آخر.

    L2=$(echo "$L1" | tr [:upper:] [:lower:])
    



فقط لتكون مختلفة:

MOREF=$(sudo run command against $VAR1 | grep name | cut -c7-)



أعرف ثلاث طرق للقيام بها:

1) وظائف مناسبة لمثل هذه المهام:

func (){
ls -l
}

استدعيها بالقول func

2) يمكن أيضًا أن يكون هناك حل مناسب آخر:

var="ls -l"
eval $var

3) يستخدم الثالث متغيرات مباشرة:

var=$(ls -l)
OR
var=`ls -l`

يمكنك الحصول على إخراج الحل الثالث بطريقة جيدة:

echo "$var"

وكذلك بطريقة سيئة:

echo $var



هذه طريقة أخرى ، جيدة للاستخدام مع بعض برامج تحرير النصوص غير القادرة على تسليط الضوء على كل كود معقد تقوم بإنشائه بشكل صحيح.

read -r -d '' str < <(cat somefile.txt)
echo "${#str}"
echo "$str"



Related