Ketika saya mengetiknya echo $PATHmengembalikan saya $PATH, tetapi saya ingin menggemakan kata $PATHdan bukan apa variabel sebenarnya singkatan, echo "$PATH"tidak berfungsi baik.
@ 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.
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:
ekspansi parameter seperti dalam $#, $var,${foo:-bar}
perintah substitusi seperti pada $(logname)(juga ${ logname;}di beberapa shell untuk menghindari subshell)
ekspansi aritmatika seperti dalam $((1+1))(juga $[1+1]di beberapa kerang).
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.
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
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.
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.
echo '$PATH'
. untuk informasi lebih lanjut tentang penawaran, kunjungi ini dan iniJawaban:
Anda hanya perlu keluar dari dolar
$
:Atau kelilingi dengan tanda kutip tunggal:
Ini akan memastikan kata tersebut tidak ditafsirkan oleh shell.
sumber
echo -e
halaman manual.-e
flag digunakan untuk memperluas, misalnya,\t
untuk karakter tab literal. Tidak ada hubungannya dengan keluar dari tanda dolar untuk mencegah ekspansi parameter.echo '\$PATH' >> output.txt
menghasilkan "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / game: / usr / local / games: / opt / vc / bin" ditulis ke file , bukan "$ PATH".echo '\044*' > first.txt
itu akan menampilkan $ * di first.txt$
dalam sintaksis kebanyakan shell adalah karakter yang sangat istimewa. Jika kita hanya melihat kerang mirip Bourne, ia digunakan untuk memperkenalkan:$#
,$var
,${foo:-bar}
$(logname)
(juga${ logname;}
di beberapa shell untuk menghindari subshell)$((1+1))
(juga$[1+1]
di beberapa kerang).$'\n'
atau$"localized string"
.Kecuali untuk kasus terakhir, ekspansi / penggantian tersebut masih terjadi di dalam tanda kutip ganda (dan di
$"..."
dalambash
atauksh93
)Untuk menghentikannya agar
$
tidak diperlakukan secara khusus, Anda perlu mengutipnya dengan:echo '$PATH'
atauecho '$'PATH
. Yang Anda umumnya ingin digunakan karena lolos dari semua karakter (kecuali dirinya sendiri) di sebagian besar shell.echo \$PATH
. Juga di dalam tanda kutip ganda:echo "\$PATH"
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
. Itu harus dihindari karena beberapa kerang menyukaiecho $""PATH
,echo $"PATH"
ksh93
danbash
mendukung$"..."
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:echo
:echo '\044PATH'
(beberapaecho
kebutuhan lainecho -e '\044PATH'
)printf '\44PATH\n'
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.sumber
Perhatikan bahwa $ double dalam tanda kutip ganda bisa menjadi masalah. Ini dapat dilakukan dengan menghasilkan $ di luar tanda kutip ganda, seperti ini:
KELUARAN:
sumber
echo "$term is the value of \$term"
seperti yang sudah dijelaskan pada jawaban lain. Atauprintf '%s is the value of $term\n' "$term"
sebagai gantinya orang tidak boleh menggunakanecho
data yang sewenang-wenang.Menggunakan:
Ini akan bekerja
sumber
ec""h'''o''' ''""''\$P''A""TH''