我编写了一个zsh
脚本来自动进行高能物理分析,现在我想在传递给其中一个字符串的命令中使用定义的数组中的一个元素和某个字符串以及另一个数组的另一个元素。我的代码如下:
bkgarr=(TopJets BosonJets DiBoson TTbar)
sigarr=(NM1 NM2 NM3 Scenario4 Scenario6)
puarr=(50PU 140PU)
lumarr=(30 300 3000)
echo Please type 1 for 50PU samples and 2 for 140PU samples
read PU
if [[ $PU -ne 1 && $PU -ne 2 ]] ; then
echo You have to enter 1 or 2
return 1
fi
echo Please type 1 for 300fb-1 and 2 for 3000fb-1
read lum
if [[ $lum -ne 1 && $lum -ne 2 ]] ; then
echo You have to enter 1 or 2
return 1
fi
if [ $PU = 1 ]; then
let "lum = $lum + 1"
#echo $lum
fi
root -l << EOF
.L readerSummerStd.C+
.q
EOF
ex NEWrunReader.py <<EOEX
:43s/Lumi.*/Lumi=$lumarr[lum]/
:x
EOEX
echo Press any key to proceed or Ctrl+C to abort!
read
for index in $bkgarr
do
screen -dmS $index"_"$lumarr[lum]
#screen -S $index -p 0 -X stuff "$(typeset -p bkgarr)"$'\r'
screen -S $index"_"$lumarr[lum] -p 0 -X stuff "./NEWrunReader.py SummerStd $puarr[PU]_$index >& $index"_"$lumarr[lum].txt &"$'\r'
done
for sigind in $sigarr
do
screen -dmS $sigin"_"$lumarr[lum]
#screen -S $sigind -p 0 -X stuff "$(typeset -p bkgarr)"$'\r'
screen -S $sigin"_"$lumarr[lum] -p 0 -X stuff "./NEWrunReader.py SummerStd $puarr[PU]_$sigind >& $sigind"_"$lumarr[lum].txt &"$'\r'
done
return 0
我认为下面的代码片段可以,但是失败了:
$index+"_"+$lumarr[lum]
$index"_"$lumarr[lum]
如果您能帮我解决这个问题,我将不胜感激。
答案1
用这个:
"${index}_${lumarr[lum]}"
一般来说:
- 使用符号对所有变量进行插值
${...}
。 - 除非您明确想要使用分词,否则始终将变量插值括在双引号字符串中。