여러 파일의 일부 문자열을 바꾸는 다음 코드가 있지만 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