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

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید




نویسنده موضوع: چاپ یک متغیر (حل شد)  (دفعات بازدید: 447 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین abdossamad2003

  • Full Member
  • *
  • ارسال: 157
چاپ یک متغیر (حل شد)
« : 26 اسفند 1397، 08:21 ب‌ظ »
با سلام خدمت دوستان

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


با تشکر
« آخرین ویرایش: 27 اسفند 1397، 11:34 ب‌ظ توسط abdossamad2003 »

آفلاین M!lad

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1757
پاسخ : چاپ یک متغیر
« پاسخ #1 : 26 اسفند 1397، 10:31 ب‌ظ »
چیزی شبیه به این باید بنویسید:

#!/bin/bash

V1=100
V2=200
V3=300

for i in {1..3} 
do
   V="V$i"
   echo "${!V}"
done
« آخرین ویرایش: 26 اسفند 1397، 10:34 ب‌ظ توسط M!lad »
..I feel no fault for the fault I feel..

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : چاپ یک متغیر
« پاسخ #2 : 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

  • Full Member
  • *
  • ارسال: 157
پاسخ : چاپ یک متغیر
« پاسخ #3 : 27 اسفند 1397، 04:08 ب‌ظ »
با سلام و تشکر از پاسخ شما

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

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



آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : چاپ یک متغیر
« پاسخ #4 : 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

  • Full Member
  • *
  • ارسال: 157
پاسخ : چاپ یک متغیر
« پاسخ #5 : 27 اسفند 1397، 06:37 ب‌ظ »
با تشکر
حالا درست شد.
فقط می خواستم بدونم این کد دستوری را از کجا یاد گرفته اید مرجع خاصی دارید یا اگر از گوگل جستجو کردید چگونه

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
پاسخ : چاپ یک متغیر
« پاسخ #6 : 27 اسفند 1397، 11:15 ب‌ظ »
خب خدا رو شکر فقط لطفاً عبارت (حل شد) رو هم به عنوان اضافه کنین.

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

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