我正在尝试编写一个函数,该函数在第二列中查找姓氏(从用户输入)并将该行返回给用户。以下是我尝试过的方法(没有奏效)。最重要的是,当我在命令行中使用姓氏代替$input_name来运行这个命令时,它可以正常工作。如您所见,确认正确读取了用户输入的回显。我错过了什么?
60 last_search () {
61 echo "What last name are you looking for?"
62 read input_name
63 echo "$input_name"
64 awk -F':' '$2 ~ /$input_name/{print $0}' temp_phonebook
65 }
- 使用
-v name=value
传递一个shell变量给awk - Shell变量不会在单引号 中展开
-
print $0
是默认动作,所以把它去掉。
你可以使用:
awk -F: -v input_name="$input_name" '$2 ~ input_name' temp_phonebook
您的awk命令是单刻度,因此$input_name
永远不会展开。
试试这样写:
awk -F':' '$2 ~ /'"$input_name"'/{print $0}' temp_phonebook
或者,使用-v name=value
提前提供值:
awk -F':' -v search="${input_name}" '$2 ~ search {print $0}' temp_phonebook
好了,我明白了!我需要单引号周围的变量'$input_name'