Làm thế nào tôi có thể lặp lại dấu hiệu đồng đô la?


67

Ví dụ, $PATH$HOME

Khi tôi gõ echo $PATHnó trả về của tôi $PATH, nhưng tôi muốn lặp lại từ đó $PATHchứ không phải biến thực tế là gì, echo "$PATH"cũng không hoạt động.


có sử dụng trích dẫn duy nhất như : echo '$PATH'. để biết thêm thông tin về trích dẫn, hãy truy cập cái nàycái này
Pandya

@don chỉ thấy một bản dupe trên serverfault. Lỗi của tôi.
geedoubleya


@ StéphaneChazelas Câu hỏi đó mới hơn câu hỏi này gần hai năm.
DisplayName

@DisplayName, có nhưng được dự định là một câu hỏi "chính tắc" để bao quát tất cả những "cách tôi hiển thị ký tự đặc biệt X". .
Stéphane Chazelas

Câu trả lời:


77

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.


1
Cảm ơn, nó không nói gì về echo -etrang nam.
DisplayName

Các -ecờ đượ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ố.
chepner

2
Điều này không hoạt động khi hướng đến một tập tin. echo '\$PATH' >> output.txtkế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".
Cerin

2
Rất thú vị, nếu bạn đang sử dụng các trích dẫn đơn và một ký tự thoát, thì điều đó chỉ nên lặp lại \ $ PATH. Hệ điều hành / gói nào là tiếng vang của bạn có nguồn gốc từ?
geedoubleya

@Cerin cho bạn @ stéphane câu trả lời đã hoạt động, echo '\044*' > first.txtnó sẽ tạo ra $ * trong First.txt
maq

20

$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:

  1. mở rộng tham số như trong $#, $var,${foo:-bar}
  2. thay thế lệnh như trong $(logname)(cũng ${ logname;}trong một số shell để tránh lớp con)
  3. mở rộng số học như trong $((1+1))(cũng $[1+1]trong một số shell).
  4. các hình thức trích dẫn khác trong một số vỏ như $'\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 bashhoặ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:

  • dấu ngoặc đơn: 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.
  • vết đen : echo \$PATH. Ngoài ra bên trong dấu ngoặc kép:echo "\$PATH"
  • trong một số shell, một số toán tử trích dẫn khác : 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" . Những người nên tránh vì một số vỏ thích ksh93bashhỗ 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:

  • với tương thích với Unix echo: echo '\044PATH'(một số echonhu 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.


1

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

Hoặc 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 echocho dữ liệu tùy ý.
Stéphane Chazelas

-2

Sử dụng:

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

Điều này sẽ làm việc.


2
vui lòng thêm nhận xét khi bỏ phiếu xuống
andreas-h

2
Hoặcec""h'''o''' ''""''\$P''A""TH''
Stéphane Chazelas

Tôi không chắc chắn những gì đang được cố gắng bởi câu trả lời này. Câu trả lời là sử dụng dấu ngoặc kép hoặc dấu ngoặc đơn. echo '$ PATH' sẽ in $ PATH echo '\ $ PATH' sẽ in \ $ PATH echo "\ $ PATH" sẽ in $ PATH echo '' \ $ PATH '' về mặt kỹ thuật sẽ làm đúng, nhưng hai chuỗi null Phục vụ không có mục đích.
bobpaul
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.