@ StéphaneChazelas To pytanie jest prawie dwa lata nowsze od tego.
DisplayName,
@DisplayName, tak, ale ma na celu „kanoniczne” pytanie obejmujące wszystkie te „jak wyświetlić znak specjalny X”. (Nie jestem pewien, czy podoba mi się pomysł, że te „kanoniczne” odpowiedzi na wszystkie pytania są używane do zamykania konkretnych pytań, dlatego właśnie dodałem je jako komentarz zamiast ścisłego głosowania).
Stéphane Chazelas
Odpowiedzi:
77
Musisz tylko uciec przed dolarem $.:
echo \$PATH
$PATH
Lub otocz go pojedynczymi cytatami:
echo '$PATH'
$PATH
To zapewni, że słowo nie zostanie zinterpretowane przez powłokę.
Dzięki, echo -ena stronie podręcznika nic nie było powiedziane .
DisplayName
-eFlaga jest stosowany w celu rozszerzenia, na przykład, \tdo dosłownego znaku tabulacji. Nie ma to związku z ucieczką od znaku dolara, aby zapobiec rozszerzaniu parametrów.
chepner
2
Nie działa to podczas przekierowywania do pliku. echo '\$PATH' >> output.txtpowoduje zapisanie do pliku „/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / opt / vc / bin” , a nie „$ PATH”.
Cerin,
2
Bardzo interesujące, jeśli używasz pojedynczych cudzysłowów i znaku zmiany znaczenia, powinno to po prostu wywołać echo \ $ PATH. Z jakiego systemu operacyjnego / pakietu pochodzi twoja komenda echa?
geedoubleya
@Cerin dla ciebie @ stéphane odpowiedź zadziałała echo '\044*' > first.txt, da wynik $ * w first.txt
maq
20
$w składni większości powłok jest bardzo szczególny znak. Jeśli spojrzymy tylko na powłoki podobne do Bourne'a, używa się go do wprowadzenia:
parametrów ekspansji, jak w $#, $var,${foo:-bar}
zastępowanie poleceń jak w $(logname)(również ${ logname;}w niektórych powłokach, aby uniknąć podpowłoki)
interpretacja arytmetyczna jak w $((1+1))(także $[1+1]w niektórych powłokach).
inne formy cytowania w niektórych powłokach, takie jak $'\n'lub $"localized string".
Z wyjątkiem ostatniego przypadku te rozszerzenia / podstawienia nadal występują w podwójnych cudzysłowach (i wewnątrz $"..."w bashlub ksh93)
Aby $nie traktować tego specjalnie, musisz zacytować to za pomocą:
pojedyncze cytaty: echo '$PATH'lub echo '$'PATH. Ten, którego zazwyczaj chcesz używać, ponieważ unika wszystkich znaków (oprócz siebie) w większości powłok.
blackslash: echo \$PATH. Również w podwójnych cudzysłowach:echo "\$PATH"
w niektórych muszli, jakiś inny operator przytoczyć: echo $'$PATH', echo $'\44PATH'(zakładając kompatybilnego zestawu znaków ASCII),echo $'\u0024'
Lub upewnij się, że nie jest to część prawidłowej formy rozszerzenia wymienionej powyżej:
echo "$"PATH
echo $""PATH,echo $"PATH" . Tych należy unikać, ponieważ niektóre powłoki lubią ksh93i bashobsługują $"..."formę cytatów.
echo $``PATH. Nie ma powodu, dla którego chcesz tego użyć, poza pokazaniem, że jest to możliwe.
echo "${$+$}PATH" i inne zawiłe ...
Lub możesz wydrukować to w $inny sposób:
z zgodnym z Uniksem echo: echo '\044PATH'(niektóre inne echopotrzeby echo -e '\044PATH')
printf '\44PATH\n'
kot << \ EOF
ŚCIEŻKA $
EOF
Zwróć uwagę, jak należy cytować te ukośniki odwrotne, ponieważ są one oczywiście wyjątkowe dla powłoki.
Mam nadzieję, że do tej pory powinno być jasne, że chociaż istnieje wiele sposobów na zrobienie tego, nie ma żadnego dobrego powodu, dla którego chciałbyś użyć czegokolwiek innego niż echo '$PATH'tutaj.
Zauważ, że dosłowne $ wewnątrz podwójnych cudzysłowów może stanowić problem. Można to zrobić, generując $ poza podwójnymi cudzysłowami, jak poniżej:
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'
WYNIK:
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
Lub echo "$term is the value of \$term"jak już wyjaśniono w innej odpowiedzi. Lub printf '%s is the value of $term\n' "$term"jak zresztą nie należy używać echodo dowolnych danych.
echo '$PATH'
. Aby uzyskać więcej informacji na temat cytowania, odwiedź to i toOdpowiedzi:
Musisz tylko uciec przed dolarem
$
.:Lub otocz go pojedynczymi cytatami:
To zapewni, że słowo nie zostanie zinterpretowane przez powłokę.
źródło
echo -e
na stronie podręcznika nic nie było powiedziane .-e
Flaga jest stosowany w celu rozszerzenia, na przykład,\t
do dosłownego znaku tabulacji. Nie ma to związku z ucieczką od znaku dolara, aby zapobiec rozszerzaniu parametrów.echo '\$PATH' >> output.txt
powoduje zapisanie do pliku „/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / opt / vc / bin” , a nie „$ PATH”.echo '\044*' > first.txt
, da wynik $ * w first.txt$
w składni większości powłok jest bardzo szczególny znak. Jeśli spojrzymy tylko na powłoki podobne do Bourne'a, używa się go do wprowadzenia:$#
,$var
,${foo:-bar}
$(logname)
(również${ logname;}
w niektórych powłokach, aby uniknąć podpowłoki)$((1+1))
(także$[1+1]
w niektórych powłokach).$'\n'
lub$"localized string"
.Z wyjątkiem ostatniego przypadku te rozszerzenia / podstawienia nadal występują w podwójnych cudzysłowach (i wewnątrz
$"..."
wbash
lubksh93
)Aby
$
nie traktować tego specjalnie, musisz zacytować to za pomocą:echo '$PATH'
lubecho '$'PATH
. Ten, którego zazwyczaj chcesz używać, ponieważ unika wszystkich znaków (oprócz siebie) w większości powłok.echo \$PATH
. Również w podwójnych cudzysłowach:echo "\$PATH"
echo $'$PATH'
,echo $'\44PATH'
(zakładając kompatybilnego zestawu znaków ASCII),echo $'\u0024'
Lub upewnij się, że nie jest to część prawidłowej formy rozszerzenia wymienionej powyżej:
echo "$"PATH
. Tych należy unikać, ponieważ niektóre powłoki lubiąecho $""PATH
,echo $"PATH"
ksh93
ibash
obsługują$"..."
formę cytatów.echo $``PATH
. Nie ma powodu, dla którego chcesz tego użyć, poza pokazaniem, że jest to możliwe.echo "${$+$}PATH"
i inne zawiłe ...Lub możesz wydrukować to w
$
inny sposób:echo
:echo '\044PATH'
(niektóre inneecho
potrzebyecho -e '\044PATH'
)printf '\44PATH\n'
Zwróć uwagę, jak należy cytować te ukośniki odwrotne, ponieważ są one oczywiście wyjątkowe dla powłoki.
Mam nadzieję, że do tej pory powinno być jasne, że chociaż istnieje wiele sposobów na zrobienie tego, nie ma żadnego dobrego powodu, dla którego chciałbyś użyć czegokolwiek innego niż
echo '$PATH'
tutaj.źródło
Zauważ, że dosłowne $ wewnątrz podwójnych cudzysłowów może stanowić problem. Można to zrobić, generując $ poza podwójnymi cudzysłowami, jak poniżej:
WYNIK:
źródło
echo "$term is the value of \$term"
jak już wyjaśniono w innej odpowiedzi. Lubprintf '%s is the value of $term\n' "$term"
jak zresztą nie należy używaćecho
do dowolnych danych.Posługiwać się:
To zadziała.
źródło
ec""h'''o''' ''""''\$P''A""TH''