Menurut jawaban ini dan pemahaman saya sendiri, tilde memperluas ke direktori home:
$ echo ~
/home/braiam
Sekarang, setiap kali saya ingin ekspansi shell berfungsi, yaitu menggunakan nama variabel seperti itu $FOO
, dan jangan merusak karakter yang tidak terduga, spasi seperti itu, dll. Orang harus menggunakan tanda kutip ganda "
:
$ FOO="some string with spaces"
$ BAR="echo $FOO"
$ echo $BAR
echo some string with spaces
Mengapa ekspansi ini tidak berhasil dengan tilde?
$ echo ~/some/path
/home/braiam/some/path
$ echo "~/some/path"
~/some/path
--path ~/myfile
diperluas tetapi--path=~/myfile
tidak.Jawaban:
Alasannya, karena di dalam tanda kutip ganda, tilde
~
tidak memiliki arti khusus, itu diperlakukan sebagai literal.POSIX mendefinisikan Kutipan Ganda sebagai:
Kecuali $, `, \dan @, lain-lain karakter diperlakukan sebagai tanda kutip ganda dalam literal.
sumber
$HOME
.~
, misalnyals -l ~/"My Documents"
Ekspansi Tilde didefinisikan oleh POSIX sebagai:
Jadi jawaban terpendek adalah "karena itu didefinisikan seperti itu": mengutip salah satu karakter dalam awalan, termasuk
~
, menekan ekspansi.Itu juga mendefinisikan ekspansi seperti biasa menghasilkan satu kata, jadi mengutip tidak perlu:
Jika beberapa lintasan membutuhkan kuotasi, tetapi sisanya adalah awalan tilde, Anda dapat menggabungkan ekspansi tilde dan mengutip biasa dengan mudah:
Pada "mengapa" yang lebih luas: karena tidak ada kegunaan yang mungkin untuk pemisahan kata
~
, itu harus menjadi perilaku default, daripada mengharuskannya untuk dikutip. Karena tidak perlu mengutipnya, memberikan~
arti khusus di dalam kutipan akan menjadi komplikasi yang tidak perlu. Dan, tentu saja, alasan historis berarti itu tidak dapat diubah sekarang bahkan jika itu diinginkan.sumber
""
.~
Berasal dari C-shell, jauh sebelum ditambahkan ke shell Korn dan kemudian ditambahkan ke spesifikasi shell POSIX.Dalam C-shell,
~
adalah operator globbing (diperluas dengan rutin yang sama dengan yang berkembang*.txt
misalnya), jadi seperti sisa globbing tidak dilakukan dalam tanda kutip ganda.sumber
Meskipun ini tidak menjawab mengapa itu dirancang seperti itu, Anda menggunakannya
$HOME
sebagai gantinya jika Anda perlu menggantinya, karena itulah dasarnya~
.sumber
~otheruser
~otheruser
menunjukkan betapa buruknya memperlakukan~
berbeda dari variabel dan hal-hal lain yang diperluas dalam tanda kutip ganda.