Bagaimana saya bisa menggemakan tanda dolar?

67

Sebagai contoh, $PATHdan$HOME

Ketika saya mengetiknya echo $PATHmengembalikan saya $PATH, tetapi saya ingin menggemakan kata $PATHdan bukan apa variabel sebenarnya singkatan, echo "$PATH"tidak berfungsi baik.

Nama tampilan
sumber
ya menggunakan single quote seperti: echo '$PATH'. untuk informasi lebih lanjut tentang penawaran, kunjungi ini dan ini
Pandya
@don hanya melihat penipuan di serverfault. Salahku.
geedoubleya
Kemungkinan duplikat dari Bagaimana menggunakan karakter khusus seperti yang normal?
Stéphane Chazelas
@ StéphaneChazelas Pertanyaan itu hampir dua tahun lebih baru dari yang ini.
DisplayName
@DisplayName, ya tetapi dimaksudkan sebagai pertanyaan "kanonik" untuk membahas semua "bagaimana cara menampilkan karakter khusus X". (Saya tidak yakin saya menyukai ide dari jawaban "kanonik" yang mencakup semuanya yang digunakan untuk menutup pertanyaan spesifik, oleh karena itu saya hanya menambahkannya sebagai komentar dan bukan suara yang dekat).
Stéphane Chazelas

Jawaban:

77

Anda hanya perlu keluar dari dolar $:

echo \$PATH
$PATH

Atau kelilingi dengan tanda kutip tunggal:

echo '$PATH'
$PATH

Ini akan memastikan kata tersebut tidak ditafsirkan oleh shell.

geedoubleya
sumber
1
Terima kasih, itu tidak mengatakan apa-apa tentang echo -ehalaman manual.
DisplayName
The -eflag digunakan untuk memperluas, misalnya, \tuntuk karakter tab literal. Tidak ada hubungannya dengan keluar dari tanda dolar untuk mencegah ekspansi parameter.
chepner
2
Ini tidak berfungsi saat mengarahkan ke file. echo '\$PATH' >> output.txtmenghasilkan "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / game: / usr / local / games: / opt / vc / bin" ditulis ke file , bukan "$ PATH".
Cerin
2
Sangat menarik, jika Anda menggunakan tanda kutip tunggal dan karakter yang lolos, maka itu seharusnya hanya echo \ $ PATH. OS / paket apa yang berasal dari perintah gema Anda?
geedoubleya
@Cerin untuk Anda @ stéphane jawaban berhasil echo '\044*' > first.txtitu akan menampilkan $ * di first.txt
maq
20

$dalam sintaksis kebanyakan shell adalah karakter yang sangat istimewa. Jika kita hanya melihat kerang mirip Bourne, ia digunakan untuk memperkenalkan:

  1. ekspansi parameter seperti dalam $#, $var,${foo:-bar}
  2. perintah substitusi seperti pada $(logname)(juga ${ logname;}di beberapa shell untuk menghindari subshell)
  3. ekspansi aritmatika seperti dalam $((1+1))(juga $[1+1]di beberapa kerang).
  4. bentuk-bentuk lain dari kutipan dalam beberapa shell seperti $'\n'atau $"localized string".

Kecuali untuk kasus terakhir, ekspansi / penggantian tersebut masih terjadi di dalam tanda kutip ganda (dan di $"..."dalam bashatau ksh93)

Untuk menghentikannya agar $tidak diperlakukan secara khusus, Anda perlu mengutipnya dengan:

  • kutipan tunggal: echo '$PATH'atau echo '$'PATH. Yang Anda umumnya ingin digunakan karena lolos dari semua karakter (kecuali dirinya sendiri) di sebagian besar shell.
  • blackslash: echo \$PATH. Juga di dalam tanda kutip ganda:echo "\$PATH"
  • di beberapa kerang, beberapa lainnya Operator mengutip: echo $'$PATH', echo $'\44PATH'(dengan asumsi charset kompatibel ASCII),echo $'\u0024'

Atau pastikan itu bukan bagian dari bentuk ekspansi yang valid seperti yang tercantum di atas:

  • echo "$"PATH
  • echo $""PATH,echo $"PATH" . Itu harus dihindari karena beberapa kerang menyukai ksh93dan bashmendukung $"..."bentuk kutipan.
  • echo $``PATH. Tidak ada alasan mengapa Anda ingin menggunakan yang itu kecuali untuk menunjukkan bahwa itu mungkin.
  • echo "${$+$}PATH" dan yang berbelit-belit lainnya ...

Atau Anda bisa menampilkannya $dengan cara lain:

  • dengan Unix-compliant echo: echo '\044PATH'(beberapa echokebutuhan lain echo -e '\044PATH')
  • printf '\44PATH\n'
  • kucing << \ EOF
    $ PATH
    EOF

Perhatikan bagaimana backslash tersebut perlu dikutip karena mereka juga spesial untuk shell.

Mudah-mudahan sudah jelas sekarang bahwa meskipun ada banyak cara untuk melakukannya, tidak ada alasan bagus Anda ingin menggunakan hal lain selain di echo '$PATH'sini.

Stéphane Chazelas
sumber
1

Perhatikan bahwa $ double dalam tanda kutip ganda bisa menjadi masalah. Ini dapat dilakukan dengan menghasilkan $ di luar tanda kutip ganda, seperti ini:

echo "My terminal is $term, first file found in /dev is </dev/`ls /dev | head -n 1`>, the
dollar symbol is '"`echo '$'`"', and a newspaper costs "`echo '$'`"2.50."

or like this:

echo "$term is the value of "'$term'

KELUARAN:

My terminal is xterm, first file found in /dev is </dev/acpi>, the dollar symbol
is '$', and a newspaper costs $2.50.

xterm is the value of $term
Stilez
sumber
Atau echo "$term is the value of \$term"seperti yang sudah dijelaskan pada jawaban lain. Atau printf '%s is the value of $term\n' "$term"sebagai gantinya orang tidak boleh menggunakan echodata yang sewenang-wenang.
Stéphane Chazelas
-2

Menggunakan:

echo ''\$PATH'' >> output.txt 

Ini akan bekerja

Dima Kazavchinsky
sumber
2
silakan tambahkan komentar saat memilih-turun
andreas-h
2
Atauec""h'''o''' ''""''\$P''A""TH''
Stéphane Chazelas
Saya tidak yakin apa yang sedang dicoba dengan jawaban ini. Jawabannya adalah menggunakan \ $ atau tanda kutip tunggal. echo '$ PATH' akan mencetak $ PATH echo '\ $ PATH' akan mencetak \ $ PATH echo "\ $ PATH" akan mencetak $ PATH echo '' \ $ PATH '' secara teknis akan melakukan hal yang benar, tetapi dua string nol tidak ada gunanya.
bobpaul