در کنار عملگرهای ورودی و خروجی استاندارد، bash همچنین چند عملگر پیشرفتهتر نیز که کار با پوسته را دلپسندتر مینمایند، فراهم نموده است.
پسرعموی لوله، عملگر جایگزینی پردازش است، که به دو شکل ظاهر میگردد:
کاری که انجام میدهد، اساساً اجرای دستور داخل پرانتزها میباشد. با عملگر
در اینجا چگونگی انجام آن را در عمل میبینیم: موقعیتی را در نظر بگیرید که میخواهید تفاوت میان خروجی دو دستور را ببینید. به طور معمول، باید دو خروجی را در دو فایل قرار بدهید و با برنامه diff آنها را مقایسه کنید:
$ head-n 1 .dictionary > file1 $ tail-n 1 .dictionary > file2 $ diff-y file1 file2Aachen | zymurgy $ rm file1 file2
میتوانیم با به کاربردن عملگر جایگزینی پردازش، تمام آن را در یک سطر انجام بدهیم، و نیازی به پاکسازی دستی هم نیست:
$ diff-y <( head-n 1 .dictionary ) <( tail-n 1 .dictionary ) Aachen | zymurgy
قسمت
$ diff-y /dev/fd/63 /dev/fd/62
در اینجا میبینیم که وقتی ما از جایگزینی پردازش استفاده میکنیم، bash چگونه diff را اجرا میکند. دستورهای head و tail را اجرا میکند، خروجیهای آنها را به ترتیب به فایلهای /dev/fd/63 و /dev/fd/62 تغییرمسیر میدهد. سپس فرمان diff را با قبول کردن آن نام فایلها در جایی که ما عملگرهای جایگزینی پردازش را قرار داده بودیم اجرا میکند.
پیادهسازی واقعی فایلهای موقتی ازیک سیستم تا سیستم دیگر فرق میکند. در حقیقت، با قرار دادن یک دستور echo در ابتدای دستور یک سطری خود، میتوانید به طور واقعی مشاهده کنید آنچه در بالا گفته شد، به نظر دستور diff خواهد آمد:
$echo diff -y <( head-n 1 .dictionary ) <( tail-n 1 .dictionary ) diff -y /dev/fd/63 /dev/fd/62
عملگر
$ tar-cf >( ssh host tarxf - ) .
جایگزینی پردازش روش فشردهای برای ایجاد خودکار فایلهای موقتی FIFO در اختیار قرار میدهد. آنها نسبت به زمانی که شما خودتان به طور دستی pipeهای با نام را ایجاد میکنید، کمتر انعطافپذیر هستند، اما برای دستورات کوتاه متداول مانند diff که نیازمند نامفایلها برای منابع ورودیاشان میباشند، بدون نقص هستند.