ترغب في تخزين جميع وسائط سطر الأوامر في برنامج نصي bash في متغير واحد

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

سؤال

لنفترض أن لدي برنامج نصي bash يسمى foo.sh.

أود أن أسميها مثل هذا

foo.sh Here is a bunch of stuff on the command-line

وأرغب في تخزين كل هذا النص في متغير واحد وطباعته.

لذا فإن مخرجاتي ستكون:

Here is a bunch of stuff on the command-line

كيف يمكنني ان افعل هذا؟

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

المحلول

echo "$*"

ستفعل ما تريد، أي طباعة وسيطات سطر الأوامر بأكملها، مفصولة بمسافة (أو، من الناحية الفنية، مهما كانت قيمة $IFS يكون).إذا أردت تخزينه في متغير، يمكنك القيام بذلك

thevar="$*"

إذا لم يكن هذا يجيب على سؤالك بشكل جيد بما فيه الكفاية، فلست متأكدًا مما سأقوله أيضًا ...

نصائح أخرى

إذا كنت تريد تجنب تضمين $IFS، فاستخدم $@ (أو لا تضع $* بين علامتي الاقتباس)

$ cat atsplat
IFS="_"
echo "     at: $@"
echo "  splat: $*"
echo "noquote: "$*

$ ./atsplat this is a test
     at: this is a test
  splat: this_is_a_test
noquote: this is a test

يتبع سلوك IFS التعيينات المتغيرة أيضًا.

$ cat atsplat2
IFS="_"
atvar=$@
splatvar=$*
echo "     at: $atvar"
echo "  splat: $splatvar"
echo "noquote: "$splatvar

$ ./atsplat2 this is a test
     at: this is a test
  splat: this_is_a_test
noquote: this is a test

لاحظ أنه إذا تم التعيين إلى $IFS بعد تعيين $splatvar، فستكون جميع المخرجات هي نفسها (لن يكون لـ IFS أي تأثير في مثال "atsplat2").

الق نظرة على $* عامل.فهو يجمع جميع وسائط سطر الأوامر في واحدة.

echo "$*"

هذا يجب أن يفعل ما تريد.

مزيد من المعلومات هنا.

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