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

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

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

نویسنده موضوع: نشان ندادن خالی بودن متغیر زمانی که set -u فعال است.(حل شد)  (دفعات بازدید: 822 بار)

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

آفلاین 🇬🇧بریتانیای کبیر🇬🇧

  • High Hero Member
  • *
  • ارسال: 2658
  • جنسیت : پسر
  • GOD SAVE THE KING/QUEEN
در یک سیستم پوسته جوری تنظیم شده که اگه یک متغیر تعریف نشده خطا بده، با دستور زیر
set -uو در اسکریپت زیر
# $1 IS NOT EXIST
COMMAND=$1
if [ -z "$COMMAND" ]; then
echo COMMAND var is empty
fi

خب من میخوام بدونم که چرا اگه set -u فعال باشه و متغیر command تعریف نشده باشه فقط خطا زیر داده میشه و دستور زیر if اجرا نمیشه؟
bash: name: unbound variable
set -u و [ -z ] چه مشکلی با هم دارن که جلو کار همو میگیرن و خب پس چطور میشه در یک پوسته ای که set -u تنظیمه وجود نداشتن یک متغیر(خالی بودنشو) بفهمیم ؟ حتی set -u جلو کار [ ! -n ] رو هم میگیره.


فکر کنم فهمیدم چرا، set -u کاری میکنه که اگه از متغیری که وجود نداره استفاده کنیم، پوسته خطا بده و مثله اینکه اصلا اسکریپت به دستور echo نمیرسه و قبل از اون و در خط قبل اسکریپت متوقف میشه. set -u کاری میکنه که وجود نداشتن متغیر مثل خطاهای نحوی اجرای اسکریپتو متوقف کنه
« آخرین ویرایش: 06 امرداد 1402، 07:09 ق‌ظ توسط 🇬🇧United Kingdom🇬🇧 »
🇬🇧🏴󠁧󠁢󠁥󠁮󠁧󠁿🏴󠁧󠁢󠁷󠁬󠁳󠁿🏴󠁧󠁢󠁳󠁣󠁴󠁿🇬🇧

آفلاین mobin1387

  • Sr. Member
  • *
  • ارسال: 495
  • جنسیت : پسر
  • به زودی اینجا چیزی نوشته خواهد شد!
در یک سیستم پوسته جوری تنظیم شده که اگه یک متغیر تعریف نشده خطا بده، با دستور زیر
set -uو در اسکریپت زیر
# $1 IS NOT EXIST
COMMAND=$1
if [ -z "$COMMAND" ]; then
echo COMMAND var is empty
fi

خب من میخوام بدونم که چرا اگه set -u فعال باشه و متغیر command تعریف نشده باشه فقط خطا زیر داده میشه و دستور زیر if اجرا نمیشه؟
bash: name: unbound variable
set -u و [ -z ] چه مشکلی با هم دارن که جلو کار همو میگیرن و خب پس چطور میشه در یک پوسته ای که set -u تنظیمه وجود نداشتن یک متغیر(خالی بودنشو) بفهمیم ؟ حتی set -u جلو کار [ ! -n ] رو هم میگیره.


فکر کنم فهمیدم چرا، set -u کاری میکنه که اگه از متغیری که وجود نداره استفاده کنیم، پوسته خطا بده و مثله اینکه اصلا اسکریپت به دستور echo نمیرسه و قبل از اون و در خط قبل اسکریپت متوقف میشه. set -u کاری میکنه که وجود نداشتن متغیر مثل خطاهای نحوی اجرای اسکریپتو متوقف کنه

با Shell Expansions میشه:
# $1 IS NOT EXIST
COMMAND=$1
if [ -z "${COMMAND:-}" ]; then
echo COMMAND var is empty
fi