ওএস : উবুন্টু 16.04.3
শেল : 4.3.48 বাশ
আমি জানি যে সাময়িকভাবে কোনও ভেরিয়েবলের বিষয়বস্তু হিসাবে সাময়িকভাবে পরিবর্তন করা সম্ভব var=value command, এটি সম্ভবত IFS= read -r varএটির উল্লেখযোগ্য কেস।
এবং, গ্রেগের উইকের ধন্যবাদ , আমিও বুঝতে পেরেছি:
# Why this
foo() { echo "$var"; }
var=value foo
# And this does work
var=value; echo "$var"
# But this doesn't
var=value echo "$var"
আমার বোধগম্যতা থেকে রক্ষা পাওয়ার বিষয়টি হ'ল:
$ foo() { echo "${var[0]}"; }
$ var=(bar baz) foo
(bar baz)
আমি যতদূর জানি (এবং পূর্ববর্তী উদাহরণগুলির যুক্তি অনুসরণ করে) এটি মুদ্রণ করা উচিত bar, নয় (bar baz)।
এটা কি কেবল আমার সাথে ঘটে? এটা কি উদ্দেশ্যমূলক আচরণ এবং আমি কিছু মিস করছি? অথবা এই একটি বাগ সংশোধন করা হয়?
export var=(foo bar); echo "${var[0]}"এটি প্রিন্ট চালানোর সময় fooনা (foo bar)।
exportএটি ব্যবহার করে দেখায়:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_arrayএখানে কোনও আউটপুট দেয় না।
foo() { declare -p var; } ; var=(bar baz) fooদেয় declare -x var="(bar baz)", অ্যারে নয়