Jawaban:
Pesan kesalahan dihasilkan karena tilde ~
dikutip, seperti yang dijelaskan dalam jawaban Zanna . Jika Anda ingin menggunakan ~
, bagian skrip yang relevan adalah:
BIN_DIR=~/bin/
Jika karena alasan apa pun Anda ingin mengutip string, Anda dapat menggunakan variabel lingkungan $HOME
:
BIN_DIR="$HOME/bin/"
Menurut saya pendekatan kedua adalah praktik yang lebih baik.
~
skrip. ini bekerja dengan cara yang persis sama seperti pada baris perintah. Masalahnya adalah bahwa mengutip memblokir ekspansi tilde seperti yang dijelaskan dalam jawaban Zanna .
$HOME
skrip adalah ide yang bagus.
$HOME
daripada menggunakan ekspansi tilde? Satu-satunya penjelasan yang Anda berikan adalah mengatakan, "itu adalah ide yang lebih baik, karena Anda harus kurang memperhatikan." Saya tidak tahu apa artinya itu. Bisakah Anda menjelaskannya secara sunting? Tanpanya, tidak ada yang mendukung jawaban Anda, jadi sudah pasti jawabannya. Perluasan Tilde telah dibutuhkan oleh POSIX untuk beberapa saat sekarang dan baris hashbang script #!/bin/bash
jadi saya kira portabilitas bukan alasannya.
Tidak berfungsi karena ~
dikutip. Kutipan ganda "
menekan ekspansi tilde . Tidak ada direktori dengan nama literal ~/bin
. Seperti yang dijelaskan dalam man bash
(penekanan saya):
Ekspansi Tilde
Jika sebuah kata diawali dengan karakter tilde yang tidak dikutip (`~ '), semua karakter yang mendahului slash tanpa tanda kutip pertama (atau semua karakter, jika tidak ada slash yang tidak dikutip) dianggap sebagai awalan tilde. Jika tidak ada karakter dalam awalan tilde yang dikutip, karakter dalam awalan tilde yang mengikuti tilde diperlakukan sebagai nama login yang memungkinkan. Jika nama login ini adalah string nol, tilde diganti dengan nilai parameter shell HOME. Jika HOME tidak disetel, direktori home dari pengguna yang menjalankan shell diganti. Jika tidak, awalan tilde diganti dengan direktori home yang dikaitkan dengan nama login yang ditentukan.
Anda dapat menghapus tanda kutip , karena ~
hanya karakter di jalur ~/bin
yang akan menyebabkan shell melakukan ekspansi, dan kami ingin ekspansi dalam kasus ini. Shell tidak akan melakukan apa pun perluasan lebih lanjut pada hasil ekspansi tilde, setidaknya di Bash 4 , yang semua rilis saat ini atau jarak jauh terbaru dari Ubuntu memiliki . Jadi, bahkan jika direktori home Anda mengandung karakter yang tidak biasa seperti spasi, tidak apa-apa.
Atau Anda dapat menggunakan $HOME
bukan dari ~
, karena ekspansi parameter tidak ditekan oleh tanda kutip ganda, hanya dengan tanda kutip tunggal . Tanda kutip ganda jangan memastikan bahwa nilai diperluas tidak sendiri tunduk pada perluasan lebih lanjut, sehingga kata membelah atau ekspansi nama file tidak akan terjadi. Jadi, $HOME
bekerja bahkan dengan direktori home dengan nama aneh juga, asalkan Anda menyimpan tanda kutip ganda.
cd '~'
adalah -bash: cd: ~: No such file or directory
.
~
bukan bagian dari ekspansi parameter.