Nội suy ký hiệu đô la bên trong dấu ngoặc kép trong bash


9

Tôi đang chạy kịch bản thử nghiệm nhỏ này tôi đã viết:

#!/bin/bash

TESTCASE=$@
testHarness <<runTest
$TESTCASE
runTest

từ dòng lệnh:

./test.sh "1092$212"

nhưng ký hiệu đô la đang bị tước bỏ. Nếu tôi thoát khỏi nó, nó hoạt động. Nhưng tôi nghĩ rằng dấu ngoặc kép sẽ bảo vệ tôi khỏi cần phải làm điều này. Ai đó có thể vui lòng giúp tôi hiểu những gì đang xảy ra và làm thế nào để khắc phục điều này?


Vấn đề là nó mơ hồ - ngay cả đối với tôi là một con người - những gì bạn muốn ở đây, vì vậy máy tính không có cơ hội. Có lẽ người phiên dịch bash đang cố gắng để có được $ 212. Bash âm thầm thất bại nếu bạn cố gắng mở rộng một biến không tồn tại, do đó $ bị loại bỏ. Xem xét gói các biến của bạn trong ngoặc, ví dụ: "1092 $ {2} 12"
Brian Peterson

Câu trả lời:


18

Các biến vẫn được mở rộng bên trong dấu ngoặc kép. Nếu bạn muốn tránh hành vi này, bạn nên sử dụng dấu ngoặc đơn thay thế.


Cảm ơn bạn. Những công việc này. Có một lý do cho điều này?
Amir Afghani

8
Đúng. Nó được thiết kế theo cách đó! Nó thực sự khá hữu ích để có thể mở rộng các biến trong một chuỗi được trích dẫn. Đó là một tính năng. Nếu bạn không muốn hành vi, hãy sử dụng dấu ngoặc đơn, đó là những gì chúng được thiết kế cho.
Caleb
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.