Tôi đang cố gắng thay thế một biến chuỗi, chứa nhiều từ được trích dẫn, làm tham số cho một lệnh.Làm cách nào để thay thế các chuỗi nhiều từ, được trích dẫn thành các đối số?
Do đó, đưa ra ví dụ kịch bản sau đây (Lưu ý -x trong công việc, khiến đầu ra phải đăng nhập để stderr),
#!/bin/bash -x
myArg="\"hello\" \"world\""
echo "string is:" $myArg
exit
nào cho chúng ta,
+ myArg='"hello" "world"'
+ echo 'string is:' '"hello"' '"world"'
string is: "hello" "world"
+ exit
Dòng hai hiển thị những gì thực sự được truyền cho lệnh; bash đã thêm dấu nháy đơn cho mỗi từ trong chuỗi. Nếu tôi thay vào đó, do đó, báo giá "$ myArg", điều tương tự cũng xảy ra nhưng đối với toàn bộ chuỗi thay vì mỗi từ.
Bây giờ, hãy tưởng tượng rằng thay vì echo
, chúng tôi đang chuyển chuỗi tới chương trình trong đó một số đối số cần phải được trích dẫn mẫu, chẳng hạn như "*"
(không được mở rộng bởi vỏ).
Để làm rõ, tôi không muốn thêm một dấu ngoặc đơn nào trong suốt quá trình mở rộng. Làm thế nào tôi có thể đạt được điều này?
Bạn đang làm gì?Trừ khi bạn đang làm một cái gì đó icky với 'eval' cho dù chuỗi thông qua chương trình có chứa' "*" 'hoặc' * 'không quan trọng nhiều. – Sorpigal
Đối với bất kỳ ai đang nhầm lẫn: Lưu ý '-x' trong shebang, làm cho đầu ra được ghi lại. – user123444555621
@ Pumbaa80, quả thật vậy, tôi đã thêm vào đó làm rõ câu hỏi. –