تعیین نوع برای متغیرها

فصل 9. یک نگاه دیگر به متغیرها

‎9.2‎- تعیین نوع برای متغیرها: declare یا typeset

فرمانهای داخلی declare یا typeset که دقیقاً مترادف هستند، تعریف نمودن خصوصیات متغیرها را میسر می‌کنند. این یک شکل بسیار ضعیف از تعیین نوع [1] قابل دسترس در برخی زبانهای برنامه‌نویسی است. فرمان declare مخصوص نگارش 2 یا جدیدتر Bash است. فرمان typeset در اسکریپت‌های ksh نیز کار می‌کند.

گزینه‌های declare/typeset

‎-r‎ فقط خواندنی

(‎declare -r var1‎ همانند ‎readonly var1‎ عمل می‌کند)

این مورد، هم‌ارِز زمختِ توصیف‌کننده نوع const در C است. اقدام برای تغییر مقدار متغیر فقط خواندنی با صدور یک پیغام خطا به شکست منجر می‌گردد.

declare -r var1=1
echo "var1 = $var1"   #

(( var1++ ))          #

‎-i‎ عدد صحیح

declare -i number
#		

number=3
echo "Number = $number"     #

number=three
echo "Number = $number"     #
#

برای متغیرهای تعریف شده به عنوان عدد صحیح، برخی عملیات حسابی بدون نیاز به expr یا let اجازه داده می‌شود.

n=6/3
echo "n = $n"       #

declare -i n
n=6/3
echo "n = $n"       #

‎-a‎ آرایه

declare -a indices

با متغیر indices به عنوان یک آرایه رفتار خواهد شد.

‎-f‎ تابع(ها)

declare -f

یک سطر ‎declare -f‎ فاقد شناسه، در یک اسکریپت باعث لیست کردن تمام توابع تعریف شده در آن اسکریپت می‌گردد.

declare -f function_name

‎declare -f function_name‎ در یک اسکریپت فقط تابع نامبرده را لیست می‌کند.

‎-x export‎

declare -x var3

این گزینه یک متغیر را به عنوان متغیری برای صدور به خارج از محیط خود اسکریپت تعریف می‌کند.

‎-x var=$value‎

declare -x var3=373

فرمان declare در همان سطر تعریف مشخصات، تخصیص مقدار به متغیر را نیز اجازه می‌دهد.

مثال ‎9-10‎. کاربرد declare برای تعیین نوع متغیرها

#!/bin/bash

func1 ()
{
  echo This is a function.
}

declare -f        #

echo

declare -i var1   #  
var1=2367
echo "var1 declared as $var1"
var1=var1+1       #         
echo "var1 incremented by 1 is $var1."
                  # 
echo "Attempting to change var1 to floating point value, 2367.1."
var1=2367.1       #     
echo "var1 is still $var1"

echo

declare -r var2=13.36         #  
                              #+             
echo "var2 declared as $var2" #      
var2=13.37                    #

echo "var2 is still $var2"    #                

exit 0                        #             

Caution

استفاده از دستور داخلی declare حوزه متغیر را محدود می‌کند.

foo ()
{
FOO="bar"
}

bar ()
{
foo
echo $FOO
}

bar   # 

# با تشکر از Michael Iatrou به خاطر روشن کردن این مورد.

‎9.2.1‎. یک استفاده دیگر برای declare

فرمان declare می‌تواند در شناسایی متغیرها، محیطی یا غیر آن، مفید باشد. این مورد مخصوصاً برای آرایه‌ها می‌تواند سودمند باشد.

bash$ declare | grep HOME
HOME=/home/bozo

bash$ zzy=68
bash$ declare | grep zzy
zzy=68


bash$ Colors=([0]="purple" [1]="reddish-orange" [2]="light green")
bash$ echo ${Colors[@]}
purple reddish-orange light green
bash$ declare | grep Colors
Colors=([0]="purple" [1]="reddish-orange" [2]="light green")

یادداشت‌ها

[1]

در این مضمون، تعیین نوع یک متغیر به معنای دسته‌بندی و محدود کردن خصوصیات آن است. برای مثال، یک متغیر تعریف شده یا تعیین نوع شده به عنوان یک عدد صحیح دیگر برای مقایسه‌های رشته‌ای معتبر نیست.

declare -i intvar

intvar=23
echo "$intvar"   #
intvar=stringval
echo "$intvar"   #