Ký tự đại diện bên trong dấu ngoặc kép


32

Đây sẽ là một điều dễ dàng, nhưng trong ký ức của tôi, khi kịch bản shell, sử dụng dấu ngoặc kép sẽ cho phép mở rộng toàn cầu hóa và các biến.

Nhưng trong đoạn mã sau:

#!/bin/sh

echo *.sh
echo "*.sh"
echo '*.sh'

echo $LANG
echo "$LANG"
echo '$LANG'

Tôi nhận được kết quả này:

bob.sh redeployJboss.sh
*.sh
*.sh
en_US.utf8
en_US.utf8
$LANG

Vì vậy, trích dẫn đơn ngăn chặn mở rộng toàn cầu VÀ biến nhưng trích dẫn kép chỉ cho phép mở rộng biến và không có toàn cầu?

Tôi có thể toàn cầu trong bất kỳ mẫu trích dẫn?

Câu trả lời:


26

Bạn đã đúng: globalbing không hoạt động trong dấu ngoặc đơn hoặc dấu ngoặc kép. Tuy nhiên, bạn có thể nội suy toàn cầu với các chuỗi trích dẫn kép:

$ echo "xin chào thế giới" * .sh "tạm biệt thế giới"
xin chào thế giới [danh sách các tập tin] tạm biệt thế giới

6
Hoặc thậm chí echo "$hello and $goodbye".*(kết hợp các mở rộng biến, không gian và một quả cầu trong cùng một "từ".
vonbrand

1
Globbing dường như không hoạt động trong trường hợp này , echo /path/to/file/*${variable}. Làm thế nào để tôi toàn cầu trong khi nối thêm một email nội suy?
CMCDragonkai

2
@CMCDragonkai echo "$FOLDER_PATH"/*.extensionhoạt động tốt với tôi, trái với câu trả lời được chấp nhận, tôi phải xóa khoảng trắng giữa "*. Hy vọng nó giúp.
LostBalloon

@CMCDragonkai, @LostBalloon Tôi sử dụng mẫu sau khi tôi muốn sử dụng các khối với các biến có thể có khoảng trắng:(cd "$FOLDER_PATH" && echo *.extension)
Steven Darnell
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.