ব্যাশে, আমি ভেরিয়েবলের মানটি না করে কীভাবে চলক নামটি প্রতিধ্বনিত করতে পারি? [বন্ধ]


18

ধরা যাক আমার কাছে varব্যাশে ভেরিয়েবল রয়েছে। আমি এটির জন্য একটি মূল্য নির্ধারণ করতে পারি। উদাহরণস্বরূপ, আমি এটি একটি স্ট্রিং করব:

var="Test"

আমি চাই echoনাম varনা দ্বারা অনুষ্ঠিত মান var। (আমি এর সাথে দ্বিতীয়টি করতে পারি echo $varতবে আমি আসলে এটি করতে চাই))

এসও এর এই প্রশ্নের উত্তরটি ব্যবহার করতে বলে echo ${!var}, তবে আমি যখন এটি করি তখন আমি কেবল একটি ফাঁকা রেখা প্রত্যাবর্তন করি। উদাহরণস্বরূপ, এই বাশ স্ক্রিপ্ট

#!/bin/bash

echo "Hi"
var="Test"
echo ${!var}
echo "Bye"

এই আউটপুট ফেরত:

Hi

Bye

মধ্যে মাত্র একটি ফাঁকা লাইন দিয়ে উচ্চ এবং বিদায় পরিবর্তে Var । আমি কি ভুল করছি?

আমি চলছি ব্যাশ 4.1.5 (1) তে উবুন্টু 10.04.4 ।


11
এর ... ঠিক echo var?
— ব্রায়াম

5
আমি আসলেই এর বিষয়টি বুঝতে পারি না। @ ব্রাইয়াম যেমন উল্লেখ করেছেন, যেহেতু আপনি প্রথম স্থানে চলকের নাম নির্ধারণ করছেন আপনি সর্বদা এটি জানতে পারবেন এবং সর্বদা এটি মুদ্রণ করতে সক্ষম হবেন। আপনি আসলে কী করার চেষ্টা করছেন?
— টেরডন

3
আমি মনে করি আপনি এসও সমাধানের চালিকাটি মিস করেছেন; চেষ্টা করুনvar=Test; Test=SO; echo ${!var}
— ইরুভর

আমিও এটি পাই না তবে আপনি যা করার চেষ্টা করছেন তা কি? প্রতিধ্বনি '$ var'
— রেনান ভিসেন্টে

আমি সত্যিই কৌতূহলী, আপনার কী প্রয়োজন ছিল দয়া করে তা বলুন!
— বুবাকজৌবা

উত্তর:


22

শেল প্যারামিটার সম্প্রসারণ $ {! নাম @} বা $ {! নাম *} কৌতুক করতে পারে,

$ foo=bar
$ var_name=(${!foo@})
$ echo $var_name" = "$foo
foo = bar

যদিও সম্ভবপর আমি এর উপযোগিতা কল্পনা করতে পারি না ...


2
মনে রাখবেন যে যদি fooসংজ্ঞায়িত না হয় তবে foobarহয় তবে তা পাবেন foobar। অন্যান্য বিকল্প: var_name=${-+foo}(অথবা ${foo+foo}), var_name=$'foo', var_name=$"foo":-)
— Stéphane Chazelas

1
যদি দুটি ভেরিয়েবল দৃশ্যমান থাকে, foo এবং foobar, উভয়ই সংজ্ঞায়িত করা হয়, তবে এক্সপ্রেশনটি ${!foo@}মূল্যায়ন করবে foo foobar। উত্তর মন্তব্য হিসাবে, এর ইউটিলিটি কল্পনা করা কঠিন।
— সিপিপি নুব

30

আপনি যদি কেবল স্ট্যাটিক ভেরিয়েবলের নাম আউটপুট করতে চান তবে আপনি সাইন ইন করতে পারেন $:

echo \$var

3
এটি গ্রহণযোগ্য সমাধান হওয়া উচিত।
— ডেভিড পক্সন

9
মোটেও না!! এই উত্তরটি কোনও ভাল সমাধান নয়। এটি কেবল আউটপুট যাচ্ছে $var, তবে ভেরিয়েবলের নামটি গতিশীল হলে এটি অকেজো। উদাহরণস্বরূপ, ধরা যাক যে আপনি একটি দিয়ে শুরু করে পরিবেশের ভেরিয়েবলগুলির একটি সেট ফিল্টার PREFIX_করতে হবে তবে আপনি সেটের আকার বা এর পরিবর্তনশীল নামগুলি সম্পর্কে জানেন না। গৃহীত সমাধান এই দৃশ্যের জন্য আরও উপযুক্ত।
— হেক্টর ভালভারদে পরেজা

ওরফে বর্ণ_নাম = "$ (প্রতিধ্বনি \ $ var)"
— ইওর্ডান জর্জিভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.