функция удара не может изменить значение локальной переменной при вызове $ ()

Следующий код работает по-другому, в зависимости от которого пути называют Parse_Short_Switches (). После вызывания функции 'Parse_Short_Switches' при помощи result= $ (Parse_Short_Switches), значение $error_flag НЕ установлено к-1, как я ожидал бы.

После вызывания функции 'Parse_Short_Switches' путем простого использования Parse_Short_Switches значение $error_flag установлено к-1, как я ожидал бы.

Любая справка значительно ценилась бы.Спасибо

#!/bin/bash

function Parse_Short_Switches()
{
echo "error_flag inside of the function= $error_flag" 1>&2
error_flag="-1"
echo "blah blah ..."
}

# --- MAIN ---
error_flag="999"
echo "error_flag= $error_flag"
#result=$(Parse_Short_Switches)
Parse_Short_Switches
echo "error_flag= $error_flag"
3
задан 1 September 2016 в 23:13

1 ответ

Поэтому замена команды, $(), порождает подоболочку и команду в выполнениях в той подоболочке.

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

Как примечание стороны при выполнении сценария он работает в подоболочке; общий прием для внесения всех изменений параметров, чтобы быть доступным в оболочке вызова к source (.) сценарий.

Пример:

$ foo() { bar=2 ;}

$ bar=1

$ $(foo)

$ echo "$bar"
1

$ foo

$ echo "$bar"
2
3
ответ дан 1 December 2019 в 16:21

Другие вопросы по тегам:

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