Невозможно присвоить результат функции переменной

Следуйте по

https://stackoverflow.com/questions/1809899/how-can-i-assign-the-output-of-a-function-to-a-variable-using- bash и Как назначить вывод команды переменной?

Я написал

function getos(){ # http://stackoverflow.com/a/27776822/1637673 case "$(uname -s)" in Darwin) OS='mac' ;; Linux) OS='linux' ;; CYGWIN*|MINGW32*|MSYS*) OS='win' ;; # Add here more strings to compare # See correspondence table at the bottom of this answer *) OS='other' ;; esac echo $OS } echo $(getos) OS=${getos} echo ${OS} # show nothing echo $OS # show nothing echo $(OS) # line 36

Но bash common.sh получил

linux common.sh: line 36: OS: command not found

Что проблема ??

0
задан 12 January 2018 в 19:13

6 ответов

  • 1
    echo ${OS} и echo $OS ничего не показывают – Mithril 12 January 2018 в 18:59
  • 2
    Моя функция возвращает echo $OS, я хочу установить результат возврата на другую переменную, здесь только с тем же именем ОС. – Mithril 12 January 2018 в 19:04
  • 3
    Я думаю, проблема в том, что OS=${getos} ожидает, что getos будет переменной , а не функцией - они фактически являются разными пространствами имен (т. Е. Если у вас нет переменной с одно и то же имя ${getos} пуст) – steeldriver 12 January 2018 в 19:08
  • 4
    О, я так небрежен. Я смотрел { как (. Должно быть OS=$(getos). – Mithril 12 January 2018 в 19:15

bash пытается выполнить команду OS и не работает, потому что

$(OS)

является Command Substitution, тогда как

${OS} # or $OS

является Command Substitution

Правильный способ печати содержимого переменной OS - echo $OS.

Предположим, что вы хотите запустить свою функцию, которая присваивает значение вашей переменной OS, а затем распечатать его содержимое, если оно уже не выполняется функцией:

getos echo $OS
2
ответ дан 17 July 2018 в 23:14

bash пытается выполнить команду OS и не работает, потому что

$(OS)

является Command Substitution, тогда как

${OS} # or $OS

является Command Substitution

Правильный способ печати содержимого переменной OS - echo $OS.

Предположим, что вы хотите запустить свою функцию, которая присваивает значение вашей переменной OS, а затем распечатать его содержимое, если оно уже не выполняется функцией:

getos echo $OS
2
ответ дан 24 July 2018 в 13:46

Основная проблема заключается в том, что OS=${getos} ожидает, что getos будет переменной, а не функцией (это расширение параметра, а не подстановка команды) - они фактически разные пространства имен:

$ function foo() { echo foo; }
$ foo
foo
$ echo ${foo}

$

(т.е. переменная foo пуста); тогда как

$ foo=bar
$
$ foo
foo
$ echo ${foo}
bar

Если вы хотите OS быть синонимом getos, вы можете использовать переменную :

alias OS='getos'

( но если вы используете это в скрипте, имейте в виду, что расширение alias включено только в интерактивных оболочках по умолчанию).

TL; DR: скобки и фигурные скобки НЕ взаимозаменяемы

3
ответ дан 22 May 2018 в 15:34

Основная проблема заключается в том, что OS=${getos} ожидает, что getos будет переменной, а не функцией (это расширение параметра, а не подстановка команды) - они фактически разные пространства имен:

$ function foo() { echo foo; } $ foo foo $ echo ${foo} $

(т.е. переменная foo пуста); тогда как

$ foo=bar $ $ foo foo $ echo ${foo} bar

Если вы хотите OS быть синонимом getos, вы можете использовать переменную :

alias OS='getos'

( но если вы используете это в скрипте, имейте в виду, что расширение alias включено только в интерактивных оболочках по умолчанию).

TL; DR: скобки и фигурные скобки НЕ взаимозаменяемы

3
ответ дан 17 July 2018 в 23:14

Основная проблема заключается в том, что OS=${getos} ожидает, что getos будет переменной, а не функцией (это расширение параметра, а не подстановка команды) - они фактически разные пространства имен:

$ function foo() { echo foo; } $ foo foo $ echo ${foo} $

(т.е. переменная foo пуста); тогда как

$ foo=bar $ $ foo foo $ echo ${foo} bar

Если вы хотите OS быть синонимом getos, вы можете использовать переменную :

alias OS='getos'

( но если вы используете это в скрипте, имейте в виду, что расширение alias включено только в интерактивных оболочках по умолчанию).

TL; DR: скобки и фигурные скобки НЕ взаимозаменяемы

3
ответ дан 24 July 2018 в 13:46

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

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