Điểm:0

Không thể thoát khỏi khoảng trắng trong tên biến

lá cờ cn

Tôi đang cố xử lý khoảng trắng trong tên thư mục. Như một ví dụ:

ổ đĩa =/mnt/g; xuất khẩu ổ đĩa
mydir="$drive/thư mục có khoảng trắng trong tên"
tiếng vang "$mydir"

Kết quả:

/mnt/g/thư mục có khoảng trắng trong tên

Tất nhiên, điều này sẽ xảy ra khi sử dụng, vì bash coi đây là các đối số riêng biệt. Kết quả mong muốn sẽ giống như:

"/mnt/g/thư mục có khoảng trắng trong tên"

như một đối số duy nhất cho quá trình xử lý tiếp theo (di chuyển, sao chép hoặc bất kỳ thứ gì). Tôi đã nghĩ rằng một trích dẫn kép sẽ làm được điều đó. Rõ ràng là không. Bash tiếp tục ăn dấu ngoặc kép. Ai đó có thể chỉ cho tôi quy trình thích hợp để xử lý các biến có dấu cách được nhúng không?

Tôi đang sử dụng hệ thống con Windows dành cho Linux trong Windows 10, nhưng Ubuntu 20.04 LTS có hành vi tương tự, vì vậy tôi cho rằng những gì hiệu quả với một hệ thống thì sẽ hiệu quả với cả hai. (Có thể có gì đó với ILS, IDK.)

lá cờ uz
Jos
Biến `$drive` vẫn ổn. Đó là lệnh tiếp theo cần làm việc, ví dụ:. `mv $drive/myfile /backup/` sẽ trở thành `mv "$drive/myfile" /backup/`.
lá cờ hr
bash mở rộng `"$mydir"` như một đối số *single* - nếu nó "nổ tung khi sử dụng" thì đó là do bạn đang làm gì đó sau đó (mà bạn chưa chỉ ra)
Điểm:1
lá cờ cn

Mã của bạn là tốt! Bạn có các khoảng trắng trong biến mà tại sao cũng sẽ có các khoảng trống không có tiếng vang. Vì vậy, nếu bạn muốn sử dụng một tham số có chứa khoảng trắng, bạn phải đặt giữa các dấu ngoặc kép như bạn vẫn làm.

ví dụ:

lệnh "${biến1}" "${biến2}"
Điểm:0
lá cờ ru

Nếu đầu ra mong muốn là

"/mnt/g/thư mục có khoảng trắng trong tên"

mã bạn cần là

ổ đĩa =/mnt/g; xuất khẩu ổ đĩa
mydir="\"$drive/thư mục có dấu cách trong tên\""
tiếng vang "$mydir"
bac0n avatar
lá cờ cn
nếu bạn muốn giữ trích dẫn, bạn thường sử dụng bash *operator* `${mydir@Q}`
kris44dad avatar
lá cờ cn
Đây là phần tôi không nhận được. Một lệnh 'cd' tiếp theo (ví dụ) đối với thư mục đó cho biết, có quá nhiều đối số. Bash đang phân tích cú pháp trên các khoảng trắng. Điều này đang xảy ra trong tất cả các ví dụ được liệt kê ở đây. mydir="\"$drive/directory with space in name\"" cung cấp cho tôi biến có dấu ngoặc kép nhưng vẫn phân tích cú pháp trên khoảng trắng khi được sử dụng. ${mydir@Q} cung cấp cho tôi các trích dẫn đơn và "${mydir}" cho tôi kết quả giống như bài đăng ban đầu. Tôi dường như không thể chuyển một đối số nào cho trình bao. Tất cả chúng đều chuyển nhiều đối số khi được sử dụng.
lá cờ ru
Tôi chưa hiểu bạn muốn làm gì. Bạn có muốn `cd` thành `$mydir` từ bên trong tập lệnh bash hay bạn muốn tạo một biến môi trường để đưa ra lệnh `cd envVariable` trên dấu nhắc lệnh?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.