جایگزینی فرمان یک راهکار بسیار نیرومند پوسته یونیکس است. برای درج خروجی یک فرمان در فرمان دیگر به کار میرود. به عنوان مثال، با یک تخصیص:
$ today=$(date) # شروع میشود و خروجیاش ضبط میشود "date" فرمان $ echo "$today" Mon Jul 26 13:16:02 MEST 2004
این مورد همچنین میتواند با فرمانهایی علاوه بر تخصیصها، استفاده شود:
$ echo "Today is $(date +%A), it's $(date +%H:%M)" Today is Monday, it's 13:21
این سطر فرمان، برنامه date را دو بار فراخوانی میکند، دفعه اول برای چاپ روز هفته، دفعه دوم برای زمان فعلی.
ادامه مطلببسط ابرو یکی از جایگزینیهایی است که Bash روی فرمانها انجام میدهد. این بسط در ماهیت کاملاً مطابق قواعد دستور زبان است(درکی از مضمون ندارد). در اصل، به عنوان یک میانبر نوشتاری، برای فشرده سازی بیشتر فرمانها به کار میرود:
mv foobar.{o,exe} obj # :معادل است با mv foobar.o foobar.exe obj
یک بسط ابرو به یک کلمه یا بیشتر منجر میگردد. همه کاراکترهای خارج از ابروها در هر کلمه تکرار میشوند. ابروها محتوایی را که در بین کلمات متغیر است، تعیین میکنند.
ادامه مطلبیکی از مفاهیم اساسی برنامهنویسی پوسته پوسته فرعی میباشد.
در یک سیستم یونیکس هر پردازشی دارای سهم خود از حافظه میباشد، برای نگهداری متغیرهایش، توصیفگرهای فایل خودش، نسخه خودش از محیط به ارث برده از پردازش والدش، و مانند آن. تغییرات متغیرها (و سایر اطلاعات خصوصی)در یک پردازش بر هیچ یک از پردازشهای دیگری که به طور جاری در سیستم اجرا میشوند تأثیر نمیگذارد.
این مطلب موقع نوشتن اسکریپتها اهمیت مییابد، زیرا مقدار بسیاری از کار توسط پردازشهای فرزندِ اسکریپت انجام میشود. موقعیتهای آشکاری وجود دارد، مانند این:
ادامه مطلبمتغیرهای محیط باعث سردرگمی بسیاری هستند. عموماً اشخاص تصور میکنند «محیط» یک مخزن سراسری از تنظیمات برای سیستم گسترده است که پردازشها در آن غوطهور میشوند. این صحیح نیست.
به طور خلاصه:
متغیرهای محیط(نشان داده شده توسط env) همان پارامترهای Bash (نشان داده شده با set) نیستند. آنها سراسری نیستند (هر پردازش مجموعه خودش را دارد)، و آنها تنها وقتی پردازش فرزند تولید میشود از والد کپی میشوند. شما نمیتوانید متغیرهای یک پردازش دیگر را تجدید نمایید. Bash به شما اجازه میدهد، رشتهها را به وسیله پیوند زدن یک پارامتر با همان نام به آن، با استفاده از فرمان export به متغیرهای محیط خودش تخصیص بدهید.
ادامه مطلب
اگر آن رشته یک متغیر است، این میتواند (و باید)خیلی به سادگی با بسط پارامتر انجام بشود. انشعاب کردن به یک ابزار خارجی برای دستکاری رشتهها به افراط آهسته و غیر ضروری است.
ادامه مطلب