منبع اصلی نوشتار زیر در این لینک قرار دارد

تغذیه داده‌های محدود به اسکریپت


سند اینجا(here document) خصیصه‌ای از ترکیب دستوری(syntactic) پوسته بورن است، که تغذیه داده‌ها به برنامه را بدون ذخیره آنها در یک فایل خارجی میسر می‌سازد. این ویژگی به همان خوبی در پوسته‌های POSIX، Korn و Bash نیز کار می‌کند.

قالب اصلی عبارت است از:

someprogram <<WORD
داده‌های شما
go
here
WORD

در اینجا، someprogram می‌تواند هر برنامه‌ای باشد که از ورودی استاندارد می‌خواند (رایج‌ترین آنها cat است)، و WORD می‌تواند هر کلمه متمایز کننده‌ای که مایل هستید، باشد. (EOF یک انتخاب رایج است.)

سند اینجا(Here document)ها با این قالب خصوصیات ویژه‌ای دارند:

  • جایگزینی‌های پوسته( از قبیل ‎ $variable‎) در سند اینجا انجام می‌شوند.

  • دومین کلمه متمایز کننده خودش باید در یک سطر جداگانه و در ستون اول قرار داشته باشد.
  • هر فضای سفید داخل سند اینجا، حفظ می‌گردد، از جمله فضای سفید جداکننده سطر.

اگر بخواهیم از جایگزینی پوسته اجتناب کنیم، می‌توانیم کلمه متمایز کننده را نقل‌قولی نماییم:

someprogram <<'WORD'
داده‌های شما
$go
`here`
WORD

اگر می‌خواهیم قادر به ایجاد تورفتگی در سنداینجا باشیم، می‌توانیم کاراکتر - (خط تیره) را پیشوند کلمه متمایزکننده نماییم:

if ...
    while ....
        someprogram <<-WORD
        this is
        an indented
        here document
        WORD
    done
fi

در این شکل تمام کاراکترهای tab پیشتاز (فاصله‌ها خیر!) حذف خواهند شد. هیچگونه مقرراتی برای حذف فاصله‌های پیشتاز سطر یا فاصله‌ها و tabهای همراه هم از ابتدای سطر وجود ندارد. (محدودیت‌های قواعد دستوری Makefileها را به خاطر بیاورید، مجاب خواهید شد.)

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

Here Strings

در bash، گونه‌ای از سنداینجا به نام رشته‌اینجا(here string) وجود دارد. این جمع و جور تر است، اما محدودتر نیز می‌باشد:

read -a octets <<< "$ipaddr"

عملگر ‎<<<‎ نقشی مشابه نقش ‎ <<‎ در سنداینجا دارد، اما کلمه نگهبان برای اینکه به ما بگوید، کجا ورودی تمام می‌شود، وجود ندارد. در عوض، عملگر ‎ <<<‎ با یک کلمه منفرد دنبال می‌شود(نقل‌قول ها دوست شما هستند!). کلمه به اضافه سطر جدید، ورودی استاندارد فرمان می‌شود.


  • سنداینجا (آخرین ویرایش ‎2013-06-10 19:59:13‎ توسط GreyCat)



به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد