Bagaimana cara mencetak hanya nama skrip?

9
[username@notebook ~]$ cat foo.sh 
#!/bin/bash

echo "$0"
[username@notebook ~]$ ./foo.sh
./foo.sh
[username@notebook ~]$ 

Pertanyaan : Bagaimana saya bisa mengeluarkan "foo.sh"? Tidak peduli bagaimana itu dieksekusi.

freaking-good-question
sumber

Jawaban:

22

Gunakan basename:

#!/bin/bash

basename -- "$0"

Jika Anda ingin menetapkannya ke variabel, Anda akan melakukan:

my_name=$(basename -- "$0")
cjm
sumber
6
Ini akan gagal jika nama skrip dimulai dengan tanda hubung -, Anda perlu basename -- "$0". Menggunakan ekspansi parameter shell untuk menghindari itu dan jangan memaksa Anda untuk meluncurkan perintah eksternal.
cuonglm
3
@cuonglm, sepertinya nama skrip tidak akan dimulai dengan tanda hubung, tetapi ini adalah poin yang valid.
cjm
12

POSIXly, Anda hanya perlu Ekspansi Parameter :

#!/bin/bash

printf '%s\n' "${0##*/}"
cuonglm
sumber
1
+1 tanpa eksekusi proses tambahan.
Tom Hale