Justin mengklarifikasi pertanyaannya dalam komentar pertamanya tentang jawaban kuanta. Dia membaca dalam satu baris teks menggunakan read
(atau dengan cara dinamis lainnya) dan ingin memperluas tilde.
Pertanyaannya menjadi "Bagaimana Anda melakukan ekspansi tilde pada konten variabel?"
Pendekatan umum adalah menggunakan eval
, tetapi ia datang dengan beberapa peringatan penting, yaitu spasi dan redirection output ( >
) dalam variabel. Sepertinya ini bekerja untuk saya:
read -p "Provide the destination directory: " DESTINATION
if [ ! -d "`eval echo ${DESTINATION//>}`" ]; then
echo "'$DESTINATION' does not exist." >&2;
exit 1;
fi
Cobalah dengan masing-masing input berikut:
~
~/existing_dir
~/existing dir with spaces
~/nonexistant_dir
~/nonexistant dir with spaces
~/string containing > redirection
~/string containing > redirection > again and >> again
Penjelasan
- The
${mypath//>}
strip keluar >
karakter yang bisa mengkritik file selama eval
.
- Inilah
eval echo ...
yang dilakukan ekspansi tilde yang sebenarnya
- Kutipan ganda di sekitar
eval
adalah untuk mendukung nama file dengan spasi.
Sebagai suplemen untuk ini, Anda dapat meningkatkan UX dengan menambahkan -e
opsi untuk membaca:
read -p "Provide the destination directory: " -e DESTINATION
Sekarang ketika pengguna mengetikkan tilde dan tab hit, itu akan berkembang. Pendekatan ini tidak menggantikan pendekatan eval di atas, karena ekspansi hanya terjadi jika pengguna menekan tab. Jika dia hanya mengetikkan ~ / foo dan klik masuk, itu akan tetap sebagai tilde.
Lihat juga:
cd "~/Desktop"
Anda juga mendapatkan kesalahan. Itu harus dikutip atau disimpan sebagai variabel (tanpa tanda kutip). Misalnya,a=~/Desktop; cd $a;
berfungsi tetapi tidaka="~/Desktop"; cd Desktop;
Lihat serverfault.com/questions/417252/…