Расширение переменной сценария оболочки с помощью escape

Следующий скрипт:

#!/bin/bash

nested_func() {
    echo $1
    echo $2
}

func() {
    echo $1
    nested_func $2
}

func 1 "2 '3.1 3.2'"

Выходы:

1
2
'3.1

Что я хотел бы получить в качестве вывода:

1
2
3.1 3.2

Как мне добиться этого выхода с одним параметром на func вместо многих?

РЕДАКТИРОВАТЬ для упрощения

2 ответа

Решение

Вы можете попробовать это:

#!/bin/bash

nested_func() {
    echo "$1"
    echo "$2"
}

func() {
    nested_func "$@"
}

func 1 '2.1 2.2'

$@ представляют все позиционные параметры, заданные функции


В качестве альтернативы вы можете использовать это:

#!/bin/bash

nested_func() {
    echo "$1"
    echo "$2"
}

func() {
    echo "$1"
    shift
    nested_func "$@"
}

func 1 2 '3.1 3.2'

shift Ключевое слово позволяет пропустить первый параметр.

Вы можете легко отобразить это, если у вас есть 4 параметра...

У меня есть ожидаемый результат с этим:

#!/bin/bash
nested_func() {
    echo $1
    echo $2
}

func() {
    echo $1
    nested_func ${2%% *} "${2#* }"
}

func 1 "2 3.1 3.2"

Использование расширения параметров

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