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


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.