Есть ли способ получить позиционные параметры скрипта изнутри функции в bash?

В вашей программе есть 2 ошибки. Последняя строка недопустима:

ConnectToClient.expect(command, prompt) 

недействительна, так как expect принимает в качестве второго аргумента номер тайм-аута, а не строку.

Другая проблема заключается в том, что в вызове:

ConnectToClient.expect(prompt)

приглашение должно быть регулярным выражением (регулярное выражение). Вы предоставляете строку, которая будет скомпилирована в регулярное выражение. Однако в регулярном выражении символ [ является особенным, поэтому вам нужно его экранировать. Либо установите

prompt = r'\[root@user ~\]#'

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

7
21.01.2018, 14:37
1 ответ

В качестве переносимого решения POSIX иногда может оказаться целесообразным просто добавить исходный "$@"к аргументам функции и изменить параметры внутри функции:

#!/bin/sh
foo () {
  printf '%s-' "$@"
  printf '\n'
  # Save function parameters to custom variables
  x="$1"
  y="$2"
  z="$3"
  shift 3
  # At this point, "$@" regained its original value
  printf '%s-' "$x" "$y" "$z" "$@"
  printf '\n'
}
foo 1 2 3 "$@"

Пример вызова:

$ sh example.sh 4 5 6
1-2-3-4-5-6-
1-2-3-4-5-6-
0
18.04.2020, 23:19

Теги

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