Назначение / оценка конкатенированных переменных в tcsh

, у меня возникает загадка tcsh, и я буду благодарен за любую помощь.

Когда я запускаю:

set faceAttenRuns = (09 13)
set run = $faceAttenRuns[1]
echo $run

Это возвращает: echo 09 . Здорово.

Но когда я бегу:

set runTypes    = (sceneLoc faceAtten faceNorm)
set run = $runTypes[2]Runs[1]

Это возвращает: set: Нет совпадений . Не хорошо.

Как сделать так, чтобы $ runTypes [2] Runs [1] возвращал 09, чтобы 09 можно было присвоить переменной run ?

Спасибо!

0
01.08.2017, 17:20
1 ответ

Для выполнения операции необходимо создать промежуточную переменную:

set faceAttenRuns = ( 09 13 )
set runTypes = ( sceneLoc faceAtten faceNorm )
set varname = "$runTypes[2]Runs"
echo "set run = "\$"${varname}[1]:q" # this will show you what is going to be evaluated
eval "set run = "\$"${varname}[1]:q"
echo "result=<$run>"

Результат

set run = $faceAttenRuns[1]:q
<09>

Вот вариант без использования каких-либо промежуточных переменных:

#!/bin/csh -f

set faceAttenRuns = ( 09 13 )
set runTypes = ( sceneLoc faceAtten faceNorm )

echo "set run = "\$"{${runTypes[2]}Runs[1]:q}"
eval "set run = "\$"{${runTypes[2]}Runs[1]:q}"

echo "result=<$run>"
0
28.01.2020, 04:42

Теги

Похожие вопросы