Saya hanya ingin mendapatkan nama direktori induk untuk sebuah file.
Contoh: Ketika saya punya path=/a/b/c/d/file
, saya hanya ingin d
dan tidak /a/b/c/d
(yang saya dapatkan dari dirname $path
) sebagai output.
Apakah ada cara canggih untuk melakukan ini?
dirname
perintah akan menganggap itu ada di direktori saat ini (alias ".").parentname="$(basename "$(dirname "$pwd")")"
PWD
harus ditulis dengan huruf besar . Cobaparentname="$(basename "$(dirname "$PWD")")"
.Anda dapat menggunakan pwd untuk mendapatkan direktori kerja saat ini, dan menggunakan ekspansi parameter untuk menghindari forking ke shell (sub) lain.
Edit: sumber yang terbukti
sumber
${path##*/}
Saya pikir ini adalah solusi yang kurang sumber daya:
sunting: Maaf, ekspansi bersarang tidak mungkin dilakukan di bash, tetapi berfungsi di zsh. Versi bash:
sumber
filepath=file
atau filepath = / file`.foofile
? Jika tidak path lengkap tidak bisa tahu (mungkin jikafoofile
file yang ada tidak hanya "string").Dalam bash, dalam satu baris:
sumber
Saya suka jawaban Julian67 di atas yang terbaik, tapi ini sedikit versi yang diperluas:
sumber