Если слова в 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
Переменные не являются локальными в 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
.
Вы можете выводить все остальное содержимое прямо на экран, предполагая, что вы никогда не захотите делать с ним ничего, кроме отображения.
Можно сделать что-то похожее на это
#!/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>