Ссылки на составную переменную Ksh

Оказывается, RVM (именно так я использую Ruby) имеет специальные инструкции для обработки заданий cron.

Что касается моей общей проблемы с cron, из исследований выяснилось, что .bashrc/.bash_profile/.profile на самом деле не запускаются cron. Это объясняет, почему ruby ​​не находится в $PATH.

0
26.09.2016, 10:35
2 ответа

Самый простой ответ - установить NAME = 0 SURNAME = 1 и использовать эти переменные вместо индексов 0 и 1. однако в вашем массиве ...

Вы можете делать то, что хотите, довольно затянувшимся способом, используя дисциплинарные функции . Для каждой переменной может быть определена функция set () ; он будет вызываться каждый раз при изменении переменной. Аналогично для get () . Таким образом, вы можете сделать следующее:

#!/bin/ksh
typeset -C person
function person.name.set {
    person_arr[0]=${.sh.value}
}
function person.name.get {
    .sh.value=${person_arr[0]}
}
function person.surname.set {
    person_arr[1]=${.sh.value}
}
function person.surname.get {
    .sh.value=${person_arr[1]}
}

typeset -a person_arr
person_arr[0]=first   person_arr[1]=second
echo "name is ${person.name} ${person.surname}"

person.name=first2    person.surname=second2
echo "name is ${person.name} ${person.surname}"
echo "name is ${person_arr[@]}"

Это объявляет составную переменную person и дисциплинарные функции для подименов .name и .surname . Функции set () устанавливают соответствующее индексированное значение person_arr на новое значение (в .sh.value ), а get () функции «возвращают» соответствующее индексированное значение, задавая .sh.value .

В примере для версии массива устанавливается одно значение, а затем они заменяются составными именами. Результатом будет

name is first second
name is first2 second2
name is first2 second2

. Если у вас есть несколько переменных, которые вы хотите привязать таким образом, вам следует искать решение, используя ваш собственный тип ksh .

2
28.01.2020, 02:17

В ksh93 составные имена переменных и namerefs не идут вместе, но работает наоборот:

typeset -n First=person.name       
typeset -n Last=person.surname
person.name=John
person.surname=Doe
echo $First $Last
John Doe
3
28.01.2020, 02:17

Теги

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