if [ "$file" != *.gds ] && [ "$file" != *.cmd ]; then为什么会报错
时间: 2024-04-27 10:21:39 浏览: 202
该语句不会报错,但是可能会无法实现预期的功能。该语句主要判断变量"$file"的值是否不是以".gds"或".cmd"结尾,如果是,则执行语句块中的命令。但是,该语句中的通配符可能会导致语法错误。正确的写法应该是:
if [ "${file##*.}" != "gds" ] && [ "${file##*.}" != "cmd" ]; then
其中"${file##*.}"表示取变量"$file"的值中"."后面的部分,即文件后缀名。
相关问题
if [ "$file" != "*.gds" ] && [ "$file" != "*.cmd" ]; then里面的通配符怎么使用不了
在if条件句中,单引号和双引号会对通配符进行转义,因此通配符会被当作普通字符处理,不会进行模式匹配。如果要使用通配符进行模式匹配,可以不使用引号,或者使用反斜杠对通配符进行转义。例如,可以使用以下方式:
```
if [ $file != *.gds ] && [ $file != *.cmd ]; then
echo "不是gds或cmd文件"
else
echo "是gds或cmd文件"
fi
```
或者使用反斜杠对通配符进行转义:
```
if [ $file != \*.gds ] && [ $file != \*.cmd ]; then
echo "不是gds或cmd文件"
else
echo "是gds或cmd文件"
fi
```
注意,在使用反斜杠进行转义时,星号前面需要加上反斜杠,否则会被当作通配符。
请对如下脚本进行补充说明(数字设计中的ECO流程脚本):start "innovus" source Design globals set init_verilog file init_design loadFPlan Design ecoDefIn -postMask -reportFile InDefeco.rpt ./Design.def specifySpareGate -inst SPARE* ecoPlace -useSpareCells {true | false}] addTieHiLo -postMask {true} -cell "CellName" loadIoFile DesignName_New.save.io setNanoRouteMode -quiet -drouteUseMultiCutViaEffort high ecoRoute -ignore_route signal -modifyOnlyLayers 1:2 source final_check.tcl ## Design saveDesign $OUTPUT_PATH/${DESIGN_TOP}_${TIME}.enc ## Save DEF/GDS File defOut -floorplan -netlist -routing $DEF_FILE streamOut $OUTPUT_PATH/${DESIGN_TOP}.gds -mapFile $GDS_MAP
这个脚本是用于数字电路设计中的ECO流程,其中包含以下步骤:
1. 打开Innovus软件。
2. 设置全局变量,并指定初始的Verilog文件和设计文件。
3. 加载FPlan文件,指定ECO定义文件,执行后续的后光刻处理操作,同时生成报告文件。
4. 指定备用门,并执行布局操作,可以选择是否使用备用单元。
5. 添加接地和电源连线,同时可以选择是否在后光刻处理中执行此操作。
6. 加载新的IO文件,以更新设计。
7. 设置纳米路由模式,并执行路由操作,可以选择是否忽略某些信号,同时可以选择修改哪些图层。
8. 执行最终的检查操作,并保存设计。
9. 保存DEF/GDS文件,并将GDS文件导出。
这个脚本的具体实现和使用方法可能会因不同的设计和需求而有所不同,需要根据实际情况进行相应的修改和调整。
阅读全文