繁体   English   中英

如何在Shell脚本中使用变量扩展

[英]How to use variable expansion in shell script

我有一个看起来像这样的脚本

#!/bin/bash
#
for i in `seq -w 22 35`
do
  cd /folder/d"$i"
  generate_XDS.INP d"$i"_001.img.bz2 #makes a text file "XDS.INP" 
  u=`grep UNIT_CELL_CONSTANTS /folder/d${i-1}/CORRECT.LP | tail -n 1` #get info from previous run
#u is supposed to be something like: UNIT_CELL_CONSTANTS=    79.08    79.08    37.02  90.000  90.000  90.000
  sed -e "s:NAME_TEMPLATE_OF_DATA_FRAMES=./d${i}_001.img.bz2:NAME_TEMPLATE_OF_DATA_FRAMES=./d${i}_???.img.bz2:" -e 's:DATA_RANGE=:DATA_RANGE=1 100:' -e 's:SPOT_RANGE=:SPOT_RANGE=1 100:' -e 's:SPACE_GROUP_NUMBER=0:SPACE_GROUP_NUMBER=96:' -e "s:UNIT_CELL_CONSTANTS= 70 80 90 90 90 90:${u}:" XDS.INP > a #Change a few lines in input so that the job can run. 
  mv a XDS.INP
done

问题是“ u = line”。 我曾经有过类似的东西,但在sed行中没有u = line和最后两个替代命令,并且它起作用了。 现在,u显示为空,并且sed命令未成功结束。 我怎样才能解决这个问题? 我知道这与{brace}扩展有关。 但是我不知道如何进行。

我不知道这是否是实际的问题,但是${i-1}不会像您可能想要的那样计算算术表达式。

使用$(( i - 1 ))可以在大多数shell中运行(例如bash,破折号等),并且是算术表达式的首选语法,或者使用$[ i - 1 ]可以在bash中使用,但是不在其他外壳中。 而且,不鼓励使用后者的语法,如Charles Duffy的评论所指出的那样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM