ترغب في تخزين جميع وسائط سطر الأوامر في برنامج نصي bash في متغير واحد
-
20-08-2019 - |
سؤال
لنفترض أن لدي برنامج نصي 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 "$*"
هذا يجب أن يفعل ما تريد.