for 루프가 bash에서 작동하지 않습니다

for 루프가 bash에서 작동하지 않습니다

여러 파일의 일부 문자열을 바꾸는 다음 코드가 있지만 for 루프는 perl 스크립트를 실행하는 대신 첫 번째 파일을 확인합니다. 아래는 내 코드입니다

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

답변1

$(foo)구성은 명령을 실행 foo하고 이를 $(foo)run 출력으로 대체합니다 foo. 당신은 덩어리를 원합니다. 그것은 명령이 아닙니다. 당신이 하고 있는 일은 이라는 이름의 모든 것을 실행하는 것입니다 ./zebu.work.post_opt/ZEBU_CTO_FT_MOD*. 필요한 것은 다음과 같습니다.

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

또는 더 간단하게는 다음과 같습니다.

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

또는 더 간단하게:

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

관련 정보