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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: 🇬🇧بریتانیای کبیر🇬🇧 در 05 امرداد 1402، 08:48 ب‌ظ

عنوان: نشان ندادن خالی بودن متغیر زمانی که set -u فعال است.(حل شد)
ارسال شده توسط: 🇬🇧بریتانیای کبیر🇬🇧 در 05 امرداد 1402، 08:48 ب‌ظ
در یک سیستم پوسته جوری تنظیم شده که اگه یک متغیر تعریف نشده خطا بده، با دستور زیر
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 کاری میکنه که وجود نداشتن متغیر مثل خطاهای نحوی اجرای اسکریپتو متوقف کنه
عنوان: پاسخ : نشان ندادن خالی بودن متغیر زمانی که set -u فعال است.(حل شد)
ارسال شده توسط: mobin1387 در 09 امرداد 1402، 06:19 ب‌ظ
در یک سیستم پوسته جوری تنظیم شده که اگه یک متغیر تعریف نشده خطا بده، با دستور زیر
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