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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: linuxesabz در 23 فروردین 1395، 10:37 ق‌ظ

عنوان: مشکل در دیده نشدن متغیر در حلقه و خارج آن در بش
ارسال شده توسط: linuxesabz در 23 فروردین 1395، 10:37 ق‌ظ
با سلام من یه برنامه نوشتم شبیه زیر
while :
do
l=1
first=$l
tail -50 b |grep -m 30 'sallam' |while read LINE;do
FIELD=$(echo $LINE |grep "ali")
if [ -n "$FIELD" ]; then
echo "sallam"
l=$FILED
echo $l
fi
done
echo $l
echo $ali
done
متغیر L زمانی که در حلقه است مقدار درستی را چاپ میکند  اما زمانی که از حلقه خارج میشود مقدرا 1 را چاپ میکند.
من میخوام که مقداری که در حلقه است در بیرون حلقه نیز چاپ شود.
عنوان: پاسخ : مشکل در دیده نشدن متغیر در حلقه و خارج آن در بش
ارسال شده توسط: احسان فعالپور در 23 فروردین 1395، 10:49 ق‌ظ
کاش یکم تو رفتگی ایجاد میکردید که خوندنش راحت تر بشه، ولی به هر حال متغیر رو خارج حلقه تعریف کنید.
عنوان: پاسخ : مشکل در دیده نشدن متغیر در حلقه و خارج آن در بش
ارسال شده توسط: linuxesabz در 23 فروردین 1395، 12:27 ب‌ظ
کاش یکم تو رفتگی ایجاد میکردید که خوندنش راحت تر بشه، ولی به هر حال متغیر رو خارج حلقه تعریف کنید.
زور زدم تو رفتگی ایجاد کنم اما متاسافنه با این سیستم اصلا نمیتونم کار کنم نمیدونم مشکل منه یا واقعا مشکل انجمنه
امامتغیرو مجبورم داخل حلقه تعریف کنم بیرونش به دردم نمیخوره
عنوان: پاسخ : مشکل در دیده نشدن متغیر در حلقه و خارج آن در بش
ارسال شده توسط: احسان فعالپور در 23 فروردین 1395، 02:28 ب‌ظ
جواب قبلیم کاملا اشتباه بود. عذر میخوام.

مشکل توی استفاده از پایپه، هر بار که شما پایپ میکنی یه دونه ساب شل جدید درست میشه و بعد از پایپ هر چی که هست توی اون شل اجرا میشه.
http://serverfault.com/questions/259339/bash-variable-loses-value-at-end-of-while-read-loop