ওএস : উবুন্টু 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)"
, অ্যারে নয়