Na przykład $PATH
i$HOME
Kiedy piszę echo $PATH
, zwraca moje $PATH
, ale chcę powtórzyć słowo, $PATH
a nie to, co oznacza rzeczywista zmienna, echo "$PATH"
też nie działa.
Na przykład $PATH
i$HOME
Kiedy piszę echo $PATH
, zwraca moje $PATH
, ale chcę powtórzyć słowo, $PATH
a nie to, co oznacza rzeczywista zmienna, echo "$PATH"
też nie działa.
Odpowiedzi:
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ę.
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 $"..."
w bash
lub ksh93
)
Aby $
nie traktować tego specjalnie, musisz zacytować to za pomocą:
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.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
echo $""PATH
,echo $"PATH"
ksh93
i bash
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 inne echo
potrzeby 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
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ć echo
do dowolnych danych.
Posługiwać się:
echo ''\$PATH'' >> output.txt
To zadziała.
ec""h'''o''' ''""''\$P''A""TH''
echo '$PATH'
. Aby uzyskać więcej informacji na temat cytowania, odwiedź to i to