Ví dụ, $PATH
và$HOME
Khi tôi gõ echo $PATH
nó trả về của tôi $PATH
, nhưng tôi muốn lặp lại từ đó $PATH
chứ không phải biến thực tế là gì, echo "$PATH"
cũng không hoạt động.
Ví dụ, $PATH
và$HOME
Khi tôi gõ echo $PATH
nó trả về của tôi $PATH
, nhưng tôi muốn lặp lại từ đó $PATH
chứ không phải biến thực tế là gì, echo "$PATH"
cũng không hoạt động.
Câu trả lời:
Bạn chỉ cần thoát khỏi đồng đô la $
.:
echo \$PATH
$PATH
Hoặc bao quanh nó trong dấu ngoặc đơn:
echo '$PATH'
$PATH
Điều này sẽ đảm bảo từ không được giải thích bởi shell.
echo -e
trang nam.
-e
cờ được sử dụng để mở rộng, ví dụ, \t
để một ký tự tab chữ. Nó không liên quan đến việc thoát khỏi ký hiệu đô la để ngăn chặn việc mở rộng tham số.
echo '\$PATH' >> output.txt
kết quả là "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / opt / vc / bin" được ghi vào tệp , không phải "$ PATH".
echo '\044*' > first.txt
nó sẽ tạo ra $ * trong First.txt
$
trong cú pháp của hầu hết các shell là một ký tự rất đặc biệt. Nếu chúng ta chỉ nhìn vào các vỏ giống như Bourne, nó được sử dụng để giới thiệu:
$#
, $var
,${foo:-bar}
$(logname)
(cũng ${ logname;}
trong một số shell để tránh lớp con)$((1+1))
(cũng $[1+1]
trong một số shell).$'\n'
hoặc $"localized string"
.Ngoại trừ trường hợp cuối cùng, những mở rộng / thay thế đó vẫn xảy ra bên trong dấu ngoặc kép (và bên $"..."
trong bash
hoặc ksh93
)
Để ngăn chặn điều đó $
được đối xử đặc biệt, bạn cần trích dẫn nó bằng:
echo '$PATH'
hoặc echo '$'PATH
. Cái mà bạn thường muốn sử dụng vì nó thoát khỏi tất cả các ký tự (trừ chính nó) trong hầu hết các shell.echo \$PATH
. Ngoài ra bên trong dấu ngoặc kép:echo "\$PATH"
echo $'$PATH'
, echo $'\44PATH'
(giả sử bộ ký tự tương thích ASCII),echo $'\u0024'
Hoặc đảm bảo rằng nó không phải là một phần của hình thức mở rộng hợp lệ như được liệt kê ở trên:
echo "$"PATH
echo $""PATH
,echo $"PATH"
ksh93
và bash
hỗ trợ các $"..."
hình thức trích dẫn.echo $``PATH
. Không có lý do tại sao bạn muốn sử dụng cái đó ngoại trừ để cho thấy rằng nó có thể.echo "${$+$}PATH"
và những thứ phức tạp khác ...Hoặc bạn có thể xuất ra $
một cách khác:
echo
: echo '\044PATH'
(một số echo
nhu cầu khác echo -e '\044PATH'
)printf '\44PATH\n'
mèo << \ EOF $ PATH EOF
Lưu ý cách các dấu gạch chéo ngược cần được trích dẫn vì chúng cũng đặc biệt đối với trình bao.
Bây giờ hy vọng có thể rõ ràng rằng mặc dù có nhiều cách để làm điều đó, không có lý do chính đáng nào bạn muốn sử dụng bất cứ thứ gì khác ngoài echo '$PATH'
đây.
Lưu ý rằng chữ $ trong dấu ngoặc kép có thể là một vấn đề. Nó có thể được thực hiện bằng cách tạo $ bên ngoài dấu ngoặc kép, như thế này:
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'
ĐẦU RA:
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"
như đã được giải thích trong một câu trả lời khác. Hoặc printf '%s is the value of $term\n' "$term"
như mọi người không nên sử dụng echo
cho dữ liệu tùy ý.
Sử dụng:
echo ''\$PATH'' >> output.txt
Điều này sẽ làm việc.
ec""h'''o''' ''""''\$P''A""TH''
echo '$PATH'
. để biết thêm thông tin về trích dẫn, hãy truy cập cái này và cái này