IFS=$'\n' a=($(cat phonebook.txt))
for i in $(seq ${#a[*]}); do
[[ ${a[$i-1]} = $name ]] && echo "${a[$i]}"
done
В Bash 4 IFS=$'\n' a=($(cat phonebook.txt))
может быть заменен mapfile -t a < phonebook.txt
.
grep-A1 печатает одну строку после соответствия.-x отключает regex как-F, но он только соответствует полным строкам.
grep -x "$name" -A1 phonebook.txt | tail -n1
index=0
while read line; do
myArray[index]="$line"
done < inputfile
Более новые версии удара поддерживают ассоциативные массивы. Это помогло бы:
declare -A myArray
while read name; do
read number
myArray[name]="$number"
done < inputfile
echo ${myArray[name]}