我有以下bash:
#!/bin/bash
if ["$#" -ne "1"]; then
echo "Usage: `basename $0` <HOSTNAME>"
exit 1
fi
IPADDR=`ifconfig | head -2 | tail -1 | cut -d: -f2 | rev | cut -c8-23 | rev`
sed -i -e '1i$IPADDR $1\' /etc/hosts
但是当我cat /etc/hosts
时:
$IPADDR
我该如何处理这些问题?
答案 0 :(得分:4)
您的问题是单引号'
内的变量不会被shell扩展,但保持不变。要引用您想扩展的变量,请使用双引号"
,或者如果不需要它们,请不要使用引号,例如。
sed -i -e '1i'$IPADDR' '$1'\' /etc/hosts
上面的行$IPADDR
和$1
不在引号之内,并且会在将参数提供给sed
之前由shell进行扩展。
答案 1 :(得分:3)
单引号表示字符串不是作为变量插值的。
#!/bin/bash
IPADDR=$(/sbin/ifconfig | head -2 | tail -1 | cut -d: -f2 | rev | cut -c8-23 | rev)
sed -i -e "1i${IPADDR} ${1}" /etc/hosts
我也出于习惯在$(...)
做了命令!