Как я могу назначить вывод функции * с параметрами * переменной с помощью bash?

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

Если у меня есть такая функция:

function scan {
  echo "output"
}

... Я легко могу присвоить это переменной вот так:

VAR=$(scan)

Теперь, что, если моя функция принимает один или несколько параметров, как я могу передать их функции, используя синтаксис «расширения оболочки»? Например, это:

function greet {
  echo "Hello, $1"
}

# Does not work
VAR=$(greet("John Doe"))

Приведенное выше приводит к ошибке, подобной этой, с моим bash (версия5.0.3(1)-release ):

$ ./foo.sh 
./foo.sh: command substitution: line 8: syntax error near unexpected token `"John Doe"'
./foo.sh: command substitution: line 8: `greet("John Doe"))'
Источник
Codelisting
за 1 против

в этом коде:

function greet {
  echo "Hello, $1"
}

# Does not work
VAR=$(greet("John Doe"))

ошибка заключается в параметрах передачи скобок. попробуйте сделать это:

function greet {
  echo "Hello, $1"
}

# works
VAR=$(greet "John Doe")

он должен работать.

Объяснение: когда вы используете $ an круглую скобку, вы должны писать внутри круглой скобки команду, как в оболочке, чтобы параметры передавались без скобок.

  • 0
    Спасибо. Я уже задокументировал это (одновременно с написанием вопроса) здесь: stackoverflow.com/a/59388263/227779 :-)
  • 0
    Зачем мне голосовать за него, если он в основном просто дублирует мой ответ, который был написан ранее? Я нашел ответ на свой вопрос, когда писал его, но решил записать ответ в стиле вопросов и ответов. Спасибо, что написали ответ, но ваш ответ не добавляет ничего большего, чем то, что уже было сказано в моем ответе.
  • 1
    Извините, я не вижу вашего ответа со своего мобильного телефона. С Уважением
  • 0
    Справедливо. Я буду поддерживать ваш ответ сейчас по доброй воле. :) Счастливого Рождества!
за 0 против

Очевидно, что в последнее время я много писал на Java. Снимите круглые скобки при вызове функции, и все работает безупречно:

function greet {
  echo "Hello, $1"
}

VAR=$(greet "John Doe")
Codelisting
Популярные категории
На заметку программисту