Saya terima dari pengguna sebuah filepath mutlak tertentu, dan saya ingin membuat variabel yang akan menjadi string yang tidak akan hanya menyertakan PERTAMA dua komponen path file, tapi tanpa mencetaknya atau apa.
Misalnya, jalur absolut dapat berupa:
/home/myusername/folder1/folder2/folder3
Dan itu disimpan di "target_path", dan saya hanya ingin "mydir":
/folder1/folder2/folder3
Saya mencoba menggunakan perintah cut dengan cara yang berbeda tetapi tidak berhasil.
command-line
bash
environment-variables
Kehidupan pi
sumber
sumber
/home/username
sebenarnya$HOME
dari pengguna yang memohon? jika demikian Anda bisa menghapusnya hanya menggunakanmydir="${target_path#$HOME}"
saya pikirJawaban:
Menggunakan manipulasi string bash :
Jadi, string yang Anda inginkan adalah (menambahkan kembali garis miring terkemuka):
Untuk variabel
a
,${a#foo}
akan menghapus string matching terpendekfoo
dari awal daria
. Jadi, kami menghapus string terpendek yang mengandung tiga/
(termasuk garis miring di jalur), untuk menghapus dua komponen pertama dari jalur absolut.sumber
Berikut ini adalah contoh menggunakan
cut
Jika Anda memerlukan arahan,
/
Anda dapat menambahkan| sed 's/^/\//'
ke akhir baris Anda.Anda perlu
-f4-
karena-d '/'
memberitahucut
untuk digunakan/
sebagai pembatas antar bidang. Jadi bidang pertama muncul sebelum pembatas pertama, dalam hal ini bidang pertama kosong. Begitufolder1
juga bidang ke-4 dan-f4-
memberi tahu cut untuk menggunakan semua bidang dari tanggal 4 dan seterusnya.sumber
Anda dapat menggunakan ekspansi parameter bash seperti:
Sesudah ini:
memberi:
Ini bekerja dengan menghapus kecocokan pertama dari pola
/*/*/
dari variabel target_path Anda, dengan menggunakan${target_path#pattern}
sintaks ekspansi parameter shell. Sayangnya ini menghapus/
karakter pertama , itulah sebabnya karakter itu harus dimasukkan secara eksplisit saat mengatur variabel myvar.Peringatan: Anda harus memeriksa bahwa variabel target_path Anda berisi beberapa karakter, dan lebih panjang dari dua segmen jalur sebelum menggunakan metode ini. Misalnya
target_path=/home/username/
, jikamyvar=/
. Ini bisa berbahaya bagi sistem Anda jika Anda menjalankan sesuatu sepertirm -rf "$myvar"*
. Jangan coba ini!sumber