basename - برگشت نام خالص یک مسیر

basename - از این دستور برای بازگشت نام خالص یک مسیر استفاده میشود.

شکل کلی دستور:

$ basename [string] [suffix]

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

خروجی دستور basename نام مسیر مسیر شماره
"lib" "/usr" "/usr/lib" 1
"usr" "/" "/usr/" 2
"usr"  "." "usr" 3
"/" "/" "/" 4
"."  "." "." 5
".."  "." ".." 6

در شماره یک اگر در جلوی basename مسیر مشخص شده را وارد کنید، رشته ی بعد از آخرین ممیز را در خروجی نشان خواهد داد. در دستور دوم، همین‌طور که در ابتدا گفته شد، بعد از آخرین ممیز به شرط وجود رشته، رشته را چاپ خواهد کرد از آنجایی که بعد از آخرین ممیز هیچ رشته‌ای وجود ندارد آخرین ممیز را در نظر نخواهد گرفت و بجای آن یکی مانده به آخرین ممیز را به عنوان ممیز آخر پردازش می‌کند و رشته‌ی‌بعد از آن یعنی user را چاپ خواهد کرد.

نکته: سوال: اگر بعد از آخرین رشته متنی را خودمان وارد کنیم چه می‌شود ؟ مثال زیر را در نظر بگیرید :

$ basename /etc/bash.bashrc
bash.bashrc
$ basename /etc/bash.bashrc one
bash.bashrc

همین‌طور که می‌بینید، با وارد کردن رشته‌ای بعد از مسیر مشخص شده، آن نادیده گرفته می‌شود، به مثال‌های بعدی توجه کنید :

$ basename /etc/bash.bashrc c
bash.bashr
$ basename /etc/bash.bashrc rc
bash.bash
$ basename /etc/bash.bashrc hrc
bash.bas
$ basename /etc/bash.bashrc bashrc
bash.
$ basename /etc/bash.bashrc .bashrc
bash

اگر بعد از آخرین رشته، رشته ای هم نام با رشته‌ی قبلی وارد کنید به همان اندازه از رشته‌ی اصلی کم خواهد شد و در خروجی آن‌چه که باقی می‌ماند چاپ خواهد شد.

این دستور فقط برای مسیرها استفاده نمی‌شود و در خیلی موارد دیگر کاربرد دارد :

$ basename http://30li.ir/bash/commands/basename
basename
$ basename Emamian basename
Emamian

گفته شد در اسکریپت نویسی هم این دستور کاربر دارد، من نمی‌خواهم شما را درگیر اسکریپت نویسی کنم و فقط با ذکر یک مثال توضیح مختصری می‌دهم :

$ AddressFile=/home/name/Desktop/test
$ cat $AddressFile
/home/one
/home/two
/home/three
/home/four
/home/five
$ cat $AddressFile | while read LINE
> do
>     count=$(( $count + 1 ))
>     var1=$(echo "$LINE")
>     echo -n "$count =  "
>     var2=$(basename $var1)
>     echo "$var2"
> done
1 =  one
2 =  two
3 =  three
4 =  four
5 =  five

من ابتدا در میزکارم یک فایل با نام test ایجاد کردم و داخل آن را محتویات فرضی در نظر گرفتم :

$ cat /home/name/Desktop/test
/home/one
/home/two
/home/three
/home/four
/home/five

برای اطلاعات بیشتر به دستور cat رجوع کنید.

سپس آدرس فایل را در متغیری به نام AddressFile قرار دادم و سپس برای یکبار خروجی از محتویات آن از دستور cat استفاده کردم. سپس آن را در داخل یک حلقه قرار دادم به این صورت که خط به خط فایل را بخواند و آن را در متغیری (var1) قرار دهد، سپس این متغیر را برای دستوری basename در نظرگرفتم تا فقط رشته‌های بعد از آخرین ممیز را نشان دهد، و خروجی حاصل از این دستور را در یک متغیر دیگری قرار دادم و سپس از آن متغیر خروجی گرفتم.

نکته: از متغیر count برای شمارش هر بار اجرای حلقه استفاده کرده‌ام.

نکته: دستور echo به صورت باطنی پس از چاپ به خط بعدی می‌رود. برای این‌که این عمل انجام نشود از گزینه‌ی اختیاری nاستفاده کرده‌ام. (برای اطلاعات بیشتر به دستور echo رجوع کنید.)

این یک مثال ساده بود، شما می‌توانید در جاهای مختلف استفاده کنید، مثلاً فرض کنید فایلی با بیش از 1000 آدرس اینترنتی دارید و می‌خواهید فقط از نام آخرین ممیز آن مطلع شوید؛ دو راه دارید : یکی اینکه دستی این کار را انجام دهید ! یا اینکه فقط از یک حلقه برای این‌کار استفاده کنید. انتخاب با شما.