Следующий код работает по-другому, в зависимости от которого пути называют 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"
Поэтому замена команды, $()
, порождает подоболочку и команду в выполнениях в той подоболочке.
, Таким образом, любые модификации, сделанные к любой структуре данных, не были бы распространены к родительской оболочке. Другими словами, изменения делаются в порядке, но в подоболочке, следовательно не затрагиваются соответствующие параметры родительской оболочки.
Как примечание стороны при выполнении сценария он работает в подоболочке; общий прием для внесения всех изменений параметров, чтобы быть доступным в оболочке вызова к source
(.
) сценарий.
Пример:
$ foo() { bar=2 ;}
$ bar=1
$ $(foo)
$ echo "$bar"
1
$ foo
$ echo "$bar"
2