Báo lại một chuỗi có một biến trong đó mà không mở rộng / đánh giá nó [đã đóng]


12

Tôi đã tìm kiếm khắp nơi. Đã thử echo và in. Đã thử báo giá đơn và đôi. Nhưng tôi đã phân tích dữ liệu và gán nó cho một biến và sau đó muốn đánh giá nó nếu có một biến trong đó. Sau đó tôi sẽ thay thế biến bằng ký tự đại diện và tìm kiếm tệp.

Thí dụ:

var="file.$DATE.txt"

### Where it goes wrong-  Needs to identify that $DATE is within the $var varaible.
test=$(echo "$var"|grep '\$')
if [[ $test ]]
then
    ### I would use whatever fix is discovered here as well
    test=$(echo $test|sed 's/\$[a-zA-Z]*/\*/')
fi

### (Actually pulling from remote machine to local)
cat $test > /tmp/temporary.file

Đây là ít nhất một trong nhiều thất bại của tôi:

PROMPT> file=blah.$DATE
PROMPT> test=$(echo "$file"|grep '\$')
PROMPT> echo $test
PROMPT>
PROMPT>

Tôi biết nó có liên quan đến việc mở rộng, nhưng không biết làm thế nào để giải quyết nó. Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn!


Bạn cần giải quyết vấn đề gì? Mà var chứa không mở rộng $date? Đối với việc sử dụng : var='file.$DATE.txt'. Để mở rộng ngày khi var được sử dụng? Tôi chắc chắn rằng bạn cần phải giải thích những gì bạn đang hỏi.

Xin lỗi, để kiểm tra xem một biến được định nghĩa trong biến "var". Lồng các loại.
krmarshall87

Tôi đã tìm ra cách giải quyết vấn đề nan giải của mình bằng cách loại bỏ ngay lập tức bất cứ thứ gì có vẻ là một biến số (mà không cần quan tâm trước tiên mà tôi cần) và trao đổi nó với một ký tự đại diện: sed 's/\${*[a-zA-Z0-9_%]*}*/\*/'
krmarshall87

Câu trả lời:


20

Nếu bạn cần $datebên trong biến var:

var='file.$date.txt'

Điều đó sẽ giữ $ bên trong biến:

$ echo "$var" | grep '\$'
file.$date.txt

8

Sử dụng dấu ngoặc đơn xung quanh các biến để ngăn chặn sự mở rộng vỏ. Ví dụ echo '$file'sẽ không mở rộng $file.

Chỉnh sửa sau khi bình luận dưới đây:

Bạn có thể thoát $dấu int int varbiến với var="file.\$DATE.txt".


Tôi cần nó để mở rộng, nhưng chỉ có một cấp độ. Quên để thêm một kết quả mong muốn từng bước. Nhưng tôi muốn nội dung của tệp $ được đánh giá cho ký hiệu đô la ($ DATE).
krmarshall87

Chỉnh sửa để giải quyết điều đó.
Munir

Tôi nhận được dữ liệu đó từ một nguồn bên ngoài. Ngay cả để thay thế $ bằng một $, tôi nghĩ, sẽ cần một tiếng vang. TUY NHIÊN, hãy để tôi xem nếu tôi phân tích cú pháp, tôi có thể ép nó vào không.
krmarshall87
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.