Shell-Script

Zsh腳本如何用字元串連接數組元素

  • August 31, 2014

我已經編寫了一個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]

如果您能幫我解決這個問題,我將不勝感激。

用這個:

"${index}_${lumarr[lum]}"

一般來說:

  1. ${...}使用符號對所有變數進行插值。
  2. 除非您明確要使用分詞,否則請始終將變數插值括在雙引號字元串中。

引用自:https://unix.stackexchange.com/questions/153041