Zsh 스크립트 배열 요소를 문자열과 연결하는 방법

Zsh 스크립트 배열 요소를 문자열과 연결하는 방법

저는 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]}"

일반적으로 말하면:

  1. 모든 변수는 기호를 사용하여 보간됩니다 ${...}.
  2. 토큰화를 명시적으로 사용하려는 경우가 아니면 항상 큰따옴표로 묶은 문자열로 변수 보간을 묶으십시오.

관련 정보