IP路由添加手动工作,但通过bash脚本运行时抛出“错误:预期的inet前缀,而不是…”

我试图运行一个脚本,应该添加此路由到表11:

ip route add local 10.1.3.212 dev eth1 proto kernel scope host src 10.1.3.212 table 11 

如果我手动运行这个命令,它是成功的,我可以看到表11中的条目,但是如果我运行脚本,执行以下操作:

  if [[ ${IP_ROUTE} == local* ]]; then ip route add ${IP_ROUTE} table ${NEW_INTERFACE_TABLE} 2>>/home/ec2-user/script_output fi 

$ {NEW_INTERFACE_TABLE}是11,脚本会抛出这个错误:

  Error: an inet prefix is expected rather than "local 10.1.3.212 dev eth1 proto kernel scope host src 10.1.3.212 ". 

请帮忙,我疯了。

问题是展开${IP_ROUTE} ,文本被解释为单个参数而不是一系列参数。 这应该发生,如果variables是引用,而不是这样,所以不应该这样做。

有些事情要检查:

  • IFS内容(您可以在脚本set | grep -E '^IFS'内运行set | grep -E '^IFS' )。 你应该得到像IFS=$' \t\n'这是一个通常的默认值。 请注意,空格字符被列为字段分隔符( IFSvariables仅包含该字符)。
  • 你真的使用bash? 如果你正在使用它,检查你的shebang是#!/bin/bash而不是#!/bin/sh
  • 你如何分配内容到IP_ROUTEvariables?