Определение переменной с или без экспорта

Я искал что-то подобное, но вместо создания регулярного выражения я просто хотел заменить акцентированные символы на их эквиваленты ASCII. Вдохновленный ответом 999 и статьей в A List Apart ( http://www.alistapart.com/articles/accent-folding-for-auto-complete/ ), я пришел op со следующей функцией. Конечно, он может быть изменен для конкретных реализаций:

var accent_fold = (function () {
    var accent_map = {
        'à': 'a', 'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', // a
        'ç': 'c',                                                   // c
        'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e',                     // e
        'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i',                     // i
        'ñ': 'n',                                                   // n
        'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', 'ø': 'o', // o
        'ß': 's',                                                   // s
        'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u',                     // u
        'ÿ': 'y'                                                    // y
    };

    return function accent_fold(s) {
        if (!s) { return ''; }
        var ret = '';
        for (var i = 0; i < s.length; i++) {
            ret += accent_map[s.charAt(i)] || s.charAt(i);
        }
        return ret;
    };
} ());

использование:

var someText = "lôõk mä, nø hånds!";
someText = accent_fold(someText);
// someText now contains: "look ma, no hands!"

838
задан Will Vousden 5 November 2013 в 16:15
поделиться

5 ответов

экспорт делает переменную доступной для подпроцессов.

То есть

export name=value

означает, что имя переменной доступно любому процессу , который вы запускаете из этого процесса оболочки. Если вы хотите, чтобы процесс использовал эту переменную, используйте export и запустите процесс из этой оболочки.

name=value

означает, что область действия переменной ограничена оболочкой и недоступна для других процессов. . Вы могли бы использовать это (скажем) для переменных цикла, временных переменных и т. Д.

Важно отметить, что экспорт переменной не делает ее доступной для родительских процессов. То есть указание и экспорт переменной в порожденном процессе не делает ее доступной в процессе, который ее запустил.

968
ответ дан 22 November 2019 в 21:06
поделиться

export сделает переменную доступной для всех оболочек, созданных из текущей оболочки.

11
ответ дан 22 November 2019 в 21:06
поделиться

Другие ответили, что экспорт делает переменную доступной для подоболочек, и это правильно, но это всего лишь побочный эффект. Когда вы экспортируете переменную, она помещает эту переменную в среду текущей оболочки (т.е. оболочка вызывает putenv (3) или setenv (3)). Среда процесса наследуется через exec, что делает переменную видимой в подоболочках.

Редактировать (с пятилетней перспективой): это глупый ответ. Цель «экспорта» - заставить переменные «находиться в среде последовательно выполняемых команд», независимо от того, являются ли эти команды подоболочками или подпроцессами.

70
ответ дан 22 November 2019 в 21:06
поделиться

в ответах говорится:

$ foo="Hello, World"
$ echo $foo
Hello, World
$ bar="Goodbye"
$ export foo
$ bash
bash-3.2$ echo $foo
Hello, World
bash-3.2$ echo $bar

bash-3.2$ 
238
ответ дан 22 November 2019 в 21:06
поделиться

Вот еще один пример:

VARTEST="value of VARTEST" 
#export VARTEST="value of VARTEST" 
sudo env | grep -i vartest 
sudo echo ${SUDO_USER} ${SUDO_UID}:${SUDO_GID} "${VARTEST}" 
sudo bash -c 'echo ${SUDO_USER} ${SUDO_UID}:${SUDO_GID} "${VARTEST}"'  

Только при использовании экспорта VARTEST значение VARTEST доступно в sudo bash -c '...'!

Дополнительные примеры см .:

3
ответ дан 22 November 2019 в 21:06
поделиться