Saya mencoba untuk memperbaiki skrip bash pertama saya, dan pada satu titik nama file dilewatkan ke skrip sebagai $1
. Saya perlu mengekstrak nama file tanpa ekstensi.
Saat ini, saya mengasumsikan bahwa semua ekstensi adalah tiga huruf jadi saya menghapus 4 karakter terakhir untuk mendapatkan nama file:
a="${1:0:-4}"
Tetapi saya harus dapat bekerja dengan ekstensi yang memiliki lebih dari tiga karakter, seperti %~n1
di Windows.
Apakah ada cara untuk mengekstrak nama file tanpa ekstensi dari argumen?
Jawaban:
Cara biasa untuk melakukan ini di bash adalah dengan menggunakan ekspansi parameter. (Lihat halaman bash man dan cari "Ekspansi Parameter".)
The
%
menunjukkan bahwa segala sesuatu yang cocok dengan pola berikut (.*
) dari kanan, menggunakan pertandingan sesingkat mungkin, adalah untuk dihapus dari parameter$1
. Dalam hal ini, Anda tidak perlu tanda kutip ganda (") di sekitar ekspresi.sumber
${1%.*}
akan kembaliSomething.eng
. Jika Anda ingin menghapus semuanya di kanan yang pertama.
termasuk.
, gunakan${1%%.*}
, yang akan kembaliSomething
.Jika Anda tahu ekstensi, Anda dapat menggunakan nama samaran
sumber
Satu liner di Bash tanpa menggunakan nama bas :
sumber