cho vòng lặp không hoạt động trong bash


7

Tôi có đoạn mã dưới đây để thay thế một số strigns trong nhiều tệp, nhưng vòng lặp for đang kiểm tra tệp đầu tiên và không thực thi tập lệnh perl. dưới đây là mã của tôi

if [ -f zebu.work.post_opt/ZEBU_CTO_FT_MOD.v ]
then
    for file in $(./zebu.work.post_opt/ZEBU_CTO_FT_MOD*);
    do
    perl -i -p -e 's/input/inout/g' $file; 
        perl -i -p -e 's/output/inout/g' $file;
        perl -i -p -e 's/wire.*\n/tran\(i0,\ o\);/g' $file;
        perl -i -p -e 's/assign.*\n//g' $file;
    done
fi

2
Loại bỏ các mẫu $(...)xung quanh tên tập tin của bạn. Bạn không cần một sự thay thế lệnh ở đó. Bạn cũng có thể kết hợp bốn yêu cầu Perl với một tốc độ duy nhất.
Kusalananda

Câu trả lời:


9

Cấu $(foo)trúc sẽ chạy lệnh foovà thay thế $(foo)bằng đầu ra của chạy foo. Bạn muốn một quả địa cầu, đó không phải là một lệnh. Những gì bạn đang làm là cố gắng chạy tất cả các tệp được gọi ./zebu.work.post_opt/ZEBU_CTO_FT_MOD*. Tất cả bạn cần là:

if [ -f zebu.work.post_opt/ZEBU_CTO_FT_MOD.v ]
then
    for file in ./zebu.work.post_opt/ZEBU_CTO_FT_MOD*;
    do
        perl -i -p -e 's/input/inout/g' "$file"
        perl -i -p -e 's/output/inout/g' "$file"
        perl -i -p -e 's/wire.*\n/tran\(i0,\ o\);/g' "$file"
        perl -i -p -e 's/assign.*\n//g' "$file"
    done
fi

Hay đơn giản hơn:

if [ -f zebu.work.post_opt/ZEBU_CTO_FT_MOD.v ]
then
    for file in ./zebu.work.post_opt/ZEBU_CTO_FT_MOD*;
    do
        perl -i -p -e 's/input/inout/g; s/output/inout/g; 
                       s/wire.*\n/tran\(i0,\ o\);/g; 
                       s/assign.*\n//g' "$file"
    done
fi

Hoặc thậm chí đơn giản hơn:

if [ -f zebu.work.post_opt/ZEBU_CTO_FT_MOD.v ]
then
    perl -i -p -e 's/input/inout/g; s/output/inout/g; 
                   s/wire.*\n/tran\(i0,\ o\);/g; 
                   s/assign.*\n//g' ./zebu.work.post_opt/ZEBU_CTO_FT_MOD*
fi

3
Là vòng lặp thậm chí cần thiết? Có thể perl -iplàm việc trên một số tập tin cùng một lúc? Tôi chưa bao giờ thử nghiệm.
Kusalananda

@Kusalananda thực sự có thể. Nên nghĩ về điều đó, cảm ơn!
terdon
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.