создавание переменной стоимости переменной использования как часть нового имени переменной

a) Проверьте, регистрируются ли сообщения ядра в файл rsyslog демоном

vi /etc/rsyslog.conf

И добавьте следующее

kern.*                 /var/log/kernel.log

Перезапустите rsyslog сервис.

/etc/initd.d/rsyslog restart

b) Обратите внимание на загруженные модули

`lsmod >/your/home/dir`

c) Поскольку паника не восстанавливаема, ожидайте ее для случая

d) После того как паника произошла, загрузите систему с помощью живого или чрезвычайного CD

e) Смонтируйтесь файловые системы (обычно / будет достаточен, не являются ли / var и / домой отдельными файловыми системами) затронутой системы (pvs, vgs, lvs команды должны быть выполнены при использовании LVM в затронутой системе для перевода в рабочее состояние LV), mount -t ext4 /dev/sdXN /mnt

f) Перейдите в /mnt/var/log/ каталог и проверка kernel.log файл. Это должно дать Вам достаточно информации, чтобы выяснить, происходит ли паника для конкретного модуля или чего-то еще.

5
22.08.2014, 15:08
6 ответов

Использовать eval:

filemsgCICS=foo
word1=CICS
eval "echo \"\$filemsg$word1\"" # => foo
eval "filemsg$word1=bar"
echo "$filemsgCICS" # => bar

но думайте дважды, нужен ли Вам действительно он этот путь.

Иначе в ksh93 должен использовать namerefs:

word1=CICS
nameref v=filemsg$word1
v="xxx" 
echo "$filemsgCICS" # => xxx

Для еще более противных взломов как этот взгляд здесь.

9
27.01.2020, 20:33
  • 1
    @dazedandconfused: Именование переменных на лету является видом вещи, которая будет иметь программистов и кодирует специалистов по обслуживанию, ожидающих Вас в темной области в целях избить Вас избыточными шнурами питания. Это - действительно не лучшая практика. –  Satanicpuppy 01.11.2013, 16:10
  • 2
    я соглашаюсь с @Satanicpuppy: это - практика для воспрепятствования, по-моему. –  MariusMatutiae 01.11.2013, 18:11

export делает это намного безопаснее, чем eval, поскольку нет опасности того, что он выполнит код оболочки после маркера оболочки. Но он делает экспорт переменных, чтобы вы могли принимать их как хотите.

export "filemsg$word1= "
3
27.01.2020, 20:33

Попробуйте это

let filemsg"$word1"=" "

Возможно, это не лучшее решение, но в прошлом оно мне помогало.

1
27.01.2020, 20:33

Это не POSIX , но в bashвсегда есть printf -v, который печатает не в стандартный вывод, а в любое имя переменной, следующее за ним-v:

x=foo; printf -v $x bar; echo $foo

Выход:

bar
3
27.01.2020, 20:33

Попробуйте это:

filemsgCICS=foo

word1=CICS

ref_filemsg=filemsg$word1

echo ${!ref_filemsg} => foo
0
27.01.2020, 20:33

Попробуйте это:

word1=CICS

var_name=filemsg$word1

eval ${var_name}="var_value"

Для проверки:

echo $filemsgCICS ==> var_value
0
27.01.2020, 20:33

Теги

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