如何在 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"。我曾经有过这样的东西,没有 u=line 和 sed 行中的最后两个替换命令,并且它有效。现在 u 显示为空,sed 命令没有成功结束。我怎样才能解决这个问题?
我知道这与 {brace} 扩展有关。但是我不知道如何进行。
我不知道这是否是这里的实际问题,但 ${i-1}
不会像您预期的那样计算算术表达式。
要么使用 $(( i - 1 ))
,它将在大多数 shell(如 bash、破折号等)中工作,并且是算术表达式的首选语法,要么使用 $[ i - 1 ]
,它将在 bash 中工作,但在其他一些 shell 中不工作。此外,正如 Charles Duffy 的评论所指出的那样,不鼓励使用后一种语法。
我有一个看起来像这样的脚本
#!/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"。我曾经有过这样的东西,没有 u=line 和 sed 行中的最后两个替换命令,并且它有效。现在 u 显示为空,sed 命令没有成功结束。我怎样才能解决这个问题? 我知道这与 {brace} 扩展有关。但是我不知道如何进行。
我不知道这是否是这里的实际问题,但 ${i-1}
不会像您预期的那样计算算术表达式。
要么使用 $(( i - 1 ))
,它将在大多数 shell(如 bash、破折号等)中工作,并且是算术表达式的首选语法,要么使用 $[ i - 1 ]
,它将在 bash 中工作,但在其他一些 shell 中不工作。此外,正如 Charles Duffy 的评论所指出的那样,不鼓励使用后一种语法。