## 🔍 درک پیشرفته متغیرها در Bash – بخش ۱۰
### 📋 ویژگیهای متغیرها: readonly و export
* میتوانید متغیری را **تنها خواندنی (immutable)** تعریف کنید تا در طول اجرای اسکریپت تغییر نکند:
```bash
declare -r name="Tecmint.com"
```
هرگونه تلاش برای بازتعریف متغیر خطا خواهد داد ([tecmint.com][1]).
* برای در دسترس قرار دادن متغیر در **محیط فرزند** (child processes)، باید آن را **export** کنید:
```bash
declare -x variable="Constant_Value"
```
و برای ترکیب readonly با export:
```bash
declare -rx variable="Constant_Value"
```
در این حالت مقدار درون اسکریپت ثابت است و به محیطهای فرزند نیز منتقل میشود ([tecmint.com][2]).
---
### 🧬 تفاوت متغیرها و متغیرهای محیطی (Environment Variables)
* متغیرهایی که export میشوند بهصورت اشیاء **محیطی** شناخته شده و در فرآیندهای زیرشاخه نیز قابل دسترسیاند.
* اگر readonly و export با هم مشخص شوند، مقدار متغیر در محیط فرزند قابل تغییر نیست .
---
### 🛠 سوئیچهای مهم `declare` در Bash
| سوئیچ | عملکرد |
| ----- | ---------------------------------------------------------------------------------------- |
| `-a` | تعریف آرایه |
| `-f` | نمایش تابع و تعریف آن |
| `-F` | نمایش فقط نام توابع |
| `-r` | متغیر را تنهاخواندنی میکند |
| `-x` | متغیر را export میکند (تبدیل به محیطی میشود) |
| `-i` | نوع integer به متغیر اختصاص میدهد ([tecmint.com][1], [LinkedIn][3], [fishshell.com][4]) |
---
## ✅ جمعبندی
در این بخش با اهمیت طبقهبندی متغیرها آشنا شدیم:
* `declare -r`: جلوگیری از تغییر متغیر
* `declare -x`: امکان دسترسی به متغیر در محیطهای فرزند
* ترکیب `-r -x`: ایجاد متغیر ایمن و محیطی
* دیگر سوئیچها مانند `-i`, `-a` و `-f` امکان تعریف نوع و آرایه را فراهم میکنند
استفاده از این ویژگیها، کنترل بیشتری روی **scope**, **type safety** و **محدودیت تغییرات ناخواسته** در متغیرها برای اسکریپتهای Bash بالاخص در محیطهای مدیریت سیستم دارد.