Получить конкретный результат из функции

Если слова в file2 уникальны, вы можете изменить порядок файлов, построить массив из file2 и применить его к file1 :

$ awk 'NR==FNR{a[$1]=$2;next}{print $1,a[$2]}' file2 file1
word_1 root_of_word_1
word_2 root_of_word_2
word_3 root_of_word_3
word_4 root_of_word_1
3
27.04.2016, 11:53
2 ответа

Переменные не являются локальными в bash по умолчанию, поэтому вы можете просто сделать:

function get_usr_choices() {
    modules=${!1}
    is_valid=-1
    while [ $is_valid -lt 1 ] 
    do
        echo "Please chose and order the available modules you need:"
        echo -e $(list_array_choices modules[@])
        echo -n "> "
        read usr_input
        choices=("$usr_input")
        is_valid=$(is_list_in_range choices[@] ${#modules[@]})
        [ "$is_valid" -eq -1 ] && echo -e "Error: your input is invalid.\n"
    done
}

get_usr_choices
# use choices here

Единственная загвоздка - не вызывать get_usr_choices в под-оболочке, используя $(. ...) или трубу, иначе вы потеряете choices.

2
27.01.2020, 21:16

Вы можете выводить все остальное содержимое прямо на экран, предполагая, что вы никогда не захотите делать с ним ничего, кроме отображения.

Можно сделать что-то похожее на это

#!/bin/bash

function get_usr_choices() {
        #put everything you only want sending to screen in this block
        {
                echo these
                echo will
                echo go
                echo to
                echo screen
        }> /dev/tty
        #Everything after the block is sent to stdout which will be picked up by the assignment below
        echo result
}
choices=$(get_usr_choices)

echo "<choices is $choices>"

Запуск этого возвращает

these
will
go
to
screen
<choices is result>
4
27.01.2020, 21:16

Теги

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