Не могу открыть экран на только что созданном pty

В POSIX shвам потребуется evalдля использования переменных с динамическими именами.

i=0
while [ "$i" -le 3 ]
do
   eval '
     var'"$i"'="hello${i}"
     echo "var$i = ${var'"$i"'}"
   '
   i=$((i+1))
done
echo "${var1}"

При использовании evalочень важно убедиться, что в аргументе, переданном в eval(, раскрываются только те переменные, которые необходимо расширить, и что их значение очищается (здесь мы знаем, что это безопасные последовательности десятичные цифры )).

Выше только два $iрасширены. Для этого мы выходим из одинарных (сильных )кавычек и вставляем $iвнутри двойных кавычек:eval '...'"$i"'...'.

Так как очень трудно получить правильное цитирование (и опасно, если вы не ), лучше максимально ограничить использование eval. В идеале только передать содержимое динамической переменной в статическую и/или обратно как:

i=0
while [ "$i" -le 3 ]
do
   var=hello$i # $var with static name
   eval "var$i=\$var" # transfer into variable with dynamic name

   echo "var$i = $var" # use var with static name instead of dynamic one
                       # everywhere else (for which we don't need eval)

   i=$((i+1))
done
echo "${var2}"

В ksh/zsh/bash/yashвы можете использовать массивы вместо (или ассоциативные массивы в ksh93, zshили последние версии bash). Обратите внимание, что индексы массивов ksh/bashначинаются с 0, а массивы являются разреженными (, больше похожими на ассоциативные массивы с ключами, ограниченными положительными целыми числами ), в то время как во всех других оболочках (, включая zshи yashна фронте типа Bourne -), индексы начинаются с 1, а массивы являются обычными массивами.

В ksh/ bash/zsh -o ksharrays:

unset -v var
i=0; while [ "$i" -le 3 ]; do
  var[i]=hello$i
  echo "var[$i]=${var[i]}"
  i=$((i+1))
done
echo "${var[1]}"

Или используя другое ((...))расширение синтаксиса POSIX sh, общее для ksh/ zsh/bash:

unset -v var
i=0; while ((i <= 3)); do
  var[i]=hello$i
  echo "var[$i]=${var[i]}"
  ((++i))
done
echo "${var[2]}"

Или с ksh93, bash,zsh -o ksharrays:

unset -v var
for ((i = 0; i <= 3; i++)); do
  var[i]=hello$i
  echo "var[$i]=${var[i]}"
done
echo "${var[3]}"
-2
03.09.2018, 16:52
1 ответ

Мне удалось наладить общение с помощью проектаtty0tty:

После загрузки модуля ядра в Linux /dev/tntxпоявятся ttyустройства. Нам только что удалось подключить одну программу к /dev/tntn, а screen/kermit/..к /dev/tnt(n+1), и это сработало.

-1
28.01.2020, 05:18

Теги

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