无法将awk命令的输出存储到变量

时间:2017-06-02 15:35:11

标签: linux bash shell awk

我正在尝试执行以下操作:

#!/bin/bash

echo "Enter Receiver HostNames (comma separated hostname list of receivers):"
read receiverIpList

receiver1=`$receiverIpList|awk -F, '{print $1}'`

echo $receiver1

当我运行脚本时,我遇到错误。

./test1.sh
Enter Receiver IP Addresses (comma separated IP list of receivers):
linux1,linux2
./test1.sh: line 6: linux1,linux2: command not found

有人可以告诉我脚本中有什么问题吗?

1 个答案:

答案 0 :(得分:1)

您尝试使用的语法是:

receiver1=`echo "$receiverIpList"|awk -F, '{print $1}'`

但你的做法是错误的。只需将输入直接读入bash数组并使用:

$ cat tst.sh
echo "Enter Receiver HostNames (comma separated hostname list of receivers):"
IFS=, read -r -a receiverIpList
for i in "${!receiverIpList[@]}"; do
  printf '%s\t%s\n' "$i" "${receiverIpList[$i]}"
done

$ ./tst.sh
Enter Receiver HostNames (comma separated hostname list of receivers):
linux1,linux2
0   linux1
1   linux2

即使你出于某种原因不想这样做,你仍然不应该使用awk,只使用bash替换或类似的,例如:

$ foo='linux1,linux2'; bar="${foo%%,*}"; echo "$bar"
linux1

请注意你的拼写顺序,就像在你发布的代码示例中一样,你有时拼写接收器正确(receiver),有时不正确(reciever) - 这可能会让你在某些时候咬你我试图使用变量名称,但实际上使用的是另一个变量名称,而不是翻转ei。我认为现在已经修复了这个问题以避免这个问题。