انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => انجمن عمومی => نویسنده: abdossamad2003 در 26 اسفند 1397، 08:21 ب‌ظ

عنوان: چاپ یک متغیر (حل شد)
ارسال شده توسط: abdossamad2003 در 26 اسفند 1397، 08:21 ب‌ظ
با سلام خدمت دوستان

فرض کنید متغیرهای YC1, YC2, YC3, .. که قبلا مقدارشان تعریف شده باشد.
اگر بخواهیم مقادیر این متغیرها را توسط حلقه فراخوانی کنیم نمی دانم چه نوع دستور echo بکارببریم.
echo ${YC${i}}که کد بالا با خطا مواجه است که i  متغیری در حلقه است مقادیر ۱و۲و۳ و ... دارد


با تشکر
عنوان: پاسخ : چاپ یک متغیر
ارسال شده توسط: M!lad در 26 اسفند 1397، 10:31 ب‌ظ
چیزی شبیه به این باید بنویسید:

#!/bin/bash

V1=100
V2=200
V3=300

for i in {1..3} 
do
   V="V$i"
   echo "${!V}"
done
عنوان: پاسخ : چاپ یک متغیر
ارسال شده توسط: علی رزم دیده در 27 اسفند 1397، 02:15 ق‌ظ
سلام
سوالتون رو می شه با راه های مختلفی جواب داد که میلاد عزیز یکی از بهترین هاش رو نوشتن. منم برای اینکه مقادیر رو توسط یک حلقه فراخوانی کنین، راه زیر به ذهنم می رسه :
#!/bin/bash

read YC{1..5} <<< $(echo {100..500..100})

for i in {1..5}; do
echo "$((YC$i))"
done

که خروجی زیر رو داره :
100
200
300
400
500

ولی حقیقتاً دلیل اصلی من از جواب دادن به این سوال،پاسخ به اون نبود بلکه طرح یه سوال بود.
این تیپ مسائل با تعریف آرایه و استفاده از اون خیلی راحت تر و سر راست تر حل می شن. شما دلیل خاصی برای استفاده از این ساختار دارین ؟ اگه نه حتماً از آرایه ها استفاده کنین تا راحت تر به جواب برسین و دستتون در کل بازتر باشه.
عنوان: پاسخ : چاپ یک متغیر
ارسال شده توسط: abdossamad2003 در 27 اسفند 1397، 04:08 ب‌ظ
با سلام و تشکر از پاسخ شما

دلیل استفاده از این ساختار این است که در یک برنامه اسکریپت من به دنبال تعریف تعداد زیادی از متغیرها با نام YC1,YC2,YC3 ,... هستم و هنگام بازخوانی این متغیرها با مشکل مواجه هستم.

${YC$i}البته در شل csh هستم.
می خواستم شکل متغیر بازخوانی شده را بدونم از پرانتز یا آکولاد یا چی استفاده کنیم.


عنوان: پاسخ : چاپ یک متغیر
ارسال شده توسط: علی رزم دیده در 27 اسفند 1397، 06:11 ب‌ظ
دستورات گفته شده مربوط به بش بودن، در صورتی که می خواین از csh استفاده کنین می تونین از ساختار زیر استفاده کنین :
#!/bin/csh

set YC1 = 100
set YC2 = 200
set YC3 = 300

foreach i (`seq 1 3`)
eval 'echo $YC'$i
end

در مورد آرایه هم می تونستین به جای تعریف YC1 , ... بیاین YC[1] , ... تعریف کنین و از امکانات آرایه ها استفاده کنین.
عنوان: پاسخ : چاپ یک متغیر
ارسال شده توسط: abdossamad2003 در 27 اسفند 1397، 06:37 ب‌ظ
با تشکر
حالا درست شد.
فقط می خواستم بدونم این کد دستوری را از کجا یاد گرفته اید مرجع خاصی دارید یا اگر از گوگل جستجو کردید چگونه
عنوان: پاسخ : چاپ یک متغیر
ارسال شده توسط: علی رزم دیده در 27 اسفند 1397، 11:15 ب‌ظ
خب خدا رو شکر فقط لطفاً عبارت (حل شد) رو هم به عنوان اضافه کنین.

در مورد کتاب هم من کتابای زیر رو برای بش خوندم :
نقل‌قول
bash Cookbook - Carl Albing, JP Vossen, and Cameron Newham
Linux Shell Scripting Essentials - Sinny Kumari

ولی شل های دیگه مثل csh , zsh و ... رو به صورت تجربی و با سرچ کردن تو اینترنت و آزمون خطا یاد گرفتم.