Script Zsh como concatanar elementos de array com string

1

Eu escrevi um script zsh para automatizar uma análise em física de alta energia e agora eu gostaria de usar um elemento do array definido em alguma string e outro elemento em outro array em um comando que é passado para uma das cordas. Meu código segue abaixo:

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

Eu achei que os snippets de código a seguir funcionariam, mas falharam:

$index+"_"+$lumarr[lum]
$index"_"$lumarr[lum]

Eu agradeceria se você pudesse me ajudar com isso.

    
por Vesnog 31.08.2014 / 17:47

1 resposta

1

Use isto:

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

Geralmente:

  1. Interpolar todas as variáveis usando a notação ${...} .
  2. A menos que você queira usar expressamente a divisão de palavras, sempre coloque as interpolações de variáveis em strings com aspas duplas.
por 31.08.2014 / 18:00