كيف يمكنك الحصول على قيمة متغير بالنظر إلى اسمها في Korn Shell؟

StackOverflow https://stackoverflow.com/questions/870860

  •  22-08-2019
  •  | 
  •  

سؤال

هل هناك طريقة في KSH للحصول على قيمة المتغير عندما يتم إعطاؤك اسم المتغير؟

فمثلا:

#!/usr/bin/ksh
var_name=$1  #pretend here that the user passed the string "PATH"
echo ${$var_name}  #echo value of $PATH -- what do I do here?
هل كانت مفيدة؟

المحلول

var_name=$1  #pretend here that the user passed the string "PATH"
printenv    $var_name

نصائح أخرى

eval `echo '$'$var_name`

ECHO CONSATENS A '$' إلى الاسم المتغير داخل $ var_name ، يقوم eval بتقييمه لإظهار القيمة.

تحرير: ما سبق ليس صحيحًا تمامًا. الإجابة الصحيحة هي مع عدم وجود backticks.

eval echo '$'$var_name

printenv ليس KSH بنيت وقد لا يكون دائما حاضرا. لإصدارات KSH القديمة ، قبل KSH93, ، تعمل طريقة "التعبير" تقييم بشكل أفضل.

تتمثل الطريقة القوية في KSH93 في استخدام متغيرات عدم التوجيه مع "nameref" أو "typeet -n".

تحديد والتحقق nameref متغير يشير إلى $PATH:

$ nameref indirect=PATH
$ print $indirect
/usr/bin:/usr/sbin

انظر كيف nameref يتغير المتغير عندما نتغير PATH:

$ PATH=/usr/bin:/usr/sbin:/usr/local/bin
$ print $indirect
/usr/bin:/usr/sbin:/usr/local/bin

إظهار نسخة KSH والكمال ل nameref:

$ type nameref
nameref is an alias for 'typeset -n'
$ echo ${.sh.version}
Version JM 93t+ 2010-02-02

لخطوة واحدة فوق إجابتك (قضيت الكثير من الوقت في محاولة للعثور على هاتين الإجابات). سيسمح لك أدناه بتصدير متغير ديناميكي ثم تذكره بشكل ديناميكي:

echo -n "Please provide short name for path:"
read PATH_SHORTCUT
echo -n "Please provide path:"
read PATH
eval export \${PATH_SHORTCUT}_PATH="${PATH}"
eval echo Path shortcut: ${PATH_SHORTCUT} set to \$"${PATH_SHORTCUT}_PATH".
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top