Tôi đang gặp một số vấn đề với việc tách từ trong việc mở rộng biến bash. Tôi muốn có thể lưu trữ một danh sách đối số trong một biến và chạy nó, nhưng bất kỳ đối số nhiều từ được trích dẫn nào không đánh giá tôi mong đợi chúng như thế nào.Làm thế nào tôi có thể vượt qua một danh sách đối số đầy đủ trong bash trong khi vẫn giữ các đối số mulitword cùng nhau?
Tôi sẽ giải thích sự cố của mình bằng ví dụ. Cho phép nói rằng tôi đã có một chức năng decho
rằng in mỗi tham số vị trí trên một dòng riêng của nó:
#!/bin/bash -u
while [ $# -gt 0 ]; do
echo $1
shift
done
Ok, nếu tôi đi decho a b "c d"
tôi nhận được:
[~]$ decho a b "c d"
a
b
c d
Đó là những gì tôi mong đợi và muốn. Nhưng mặt khác, nếu tôi nhận được danh sách các đối số từ một biến tôi nhận được điều này:
[~]$ args='a b "c d"'
[~]$ decho $args
a
b
"c
d"
Đó không phải là điều tôi muốn. Tôi có thể đi:
[~]$ echo decho $args | bash
a
b
c d
Nhưng điều đó có vẻ hơi khó chịu. Có cách nào tốt hơn để làm cho việc mở rộng $args
trong số decho $args
được phân tách theo cách tôi mong đợi không?
FYI, 'echo $ 1' là khá đáng tiếc - nó thay thế, f'rinstance, một cuộc tranh cãi của' * 'với một danh sách các tên tập tin trong thư mục hiện hành. 'echo" $ 1 "' sẽ ít gây nguy hiểm hơn. –