2009-07-28 44 views
5

Tôi muốn kiểm tra xem chuỗi của tôi có chứa một hoặc nhiều dấu hoa thị hay không.Kiểm tra xem chuỗi có chứa Asterisk (*)

Tôi đã thử này:

if [[ $date_alarm =~ .*\*.* ]] 
then 
    ... 
fi 

Nó làm việc khi tôi khởi động trực tiếp kịch bản, nhưng không nếu kịch bản này được gọi là trong quá trình shutdown (kịch bản cài đặt trong chạy mức 0 và 6 qua update-rc.d)

Bất kỳ ý tưởng, đề xuất nào?

Cảm ơn

+1

Đoán của tôi là hệ thống init của bạn không sử dụng '/ bin/bash' làm thông dịch viên, thay vào đó nó sẽ sử dụng'/bin/sh'. –

+0

Nếu câu trả lời của William có hiệu quả, đừng quên nhấp vào nút "Chấp nhận câu trả lời"! – dbr

Trả lời

2

Luôn trích dẫn chuỗi.

Để kiểm tra xem chuỗi $ date_alarm chứa một dấu hoa thị, bạn có thể làm:

 
if echo x"$date_alarm" | grep '*' > /dev/null; then 
    ... 
fi 
+0

Hoạt động tuyệt vời cảm ơn rất nhiều – voidAndAny

0

gì xảy ra nếu bạn thay thế

if [[ $date_alarm =~ .*\*.* ]] 

với

if [[ "$date_alarm" =~ .*\*.* ]] 

bạn cũng có thể muốn để thử:

if [[ "$date_alarm" =~ '\*+' ]] 

không chắc chắn về điều đó ...

liên quan

+0

nếu [["$ date_alarm" = ~. * \ *. *]] Không hoạt động, nhưng như tôi đã nói điều kỳ lạ là nó không hoạt động chỉ trong bối cảnh init trong khi shutdown nếu [[ "$ date_alarm" = ~ '\ * +']] chưa được thử nghiệm Tahnks – voidAndAny

+0

Trích dẫn các mô hình: nếu [[ "$ date_alarm" = ~] "* \ *. *."] – bstpierre

0
if echo $date_alarm|perl -e '$_=<>;exit(!/\*/)' 
then 
    ... 
fi 
1
case "$date_alarm" in 
*\**) 
    ... 
    break 
    ;; 
*) 
    # else part 
    ... 
    ;; 
esac 

Cú pháp là, tốt,/bin/sh, nhưng nó hoạt động.

0

Cuối cùng

if echo x"$date_alarm" | grep '*' > /dev/null; then 

đã làm các trick

điều Strange = ~. *. không hoạt động chỉ trong bối cảnh init trong quá trình shutdown, nhưng hoạt động hoàn hảo nếu ra mắt trong bối cảnh bash ....

+0

không cần phải gọi chương trình bên ngoài như grep để làm những gì bạn muốn. Trong bash, báo cáo trường hợp là đủ. – ghostdog74

2
expr "$date_alarm" : ".*\*.*" 
+1

một chút giải thích sẽ tốt đẹp;) – MUG4N

0

Không cần phải chuyển hướng stdout như những người khác làm. Sử dụng tùy chọn -q của grep thay thế:

nếu echo x "$ date_alarm" | grep -q '*'; sau đó

Các vấn đề liên quan