使用sed我可以在命令提示符下删除一行代码。当我在bash脚本中使用它并使用变量时它不会删除它。
function remove_user {
echo "Input user you would like to delete"
read rui
if grep -q $rui database.txt ;
then
echo "Are you sure yu want to delete this user?"
echo "(Y/N)"
read input3
if [ $input3 == "Y" ] || [ $input3 == "y" ] ;
then
sed -i '/"$rui"/d' ./databse.txt
echo "User Deleted"
echo "returning to the main menu..."
echo "$rui"
#sleep 1 ; clear
elif [ $input3 == "N" ] || [$input3 == "n" ] ;
then
echo "returning to main menu..."
sleep 1 ; clear
else
echo "input invalid"
echo "returning to main menu..."
sleep 1 ; clear
fi
else
echo " user not found"
echo "returning to main menu..."
sleep 1 ; clear
fi
我的数据库看起来像这样
拉里:Larry@hotmail.com:拉里鲍勃:ATC:4.0
不确定问题是什么,因为代码不适用于变量
答案 0 :(得分:1)
您需要通过简单地退出单引号分隔的sed脚本,使变量对shell可见。你可以通过在变量之前添加一个终止的单引号,然后在它之后再次添加一个单引号来实现:
sed -i '/'"$rui"'/d' ./databse.txt
您不必在整个脚本周围使用双引号的原因是,当shell解释您的整个脚本而不仅仅是您想要扩展的变量时,会让您惊喜不已。 e.g:
$ echo "money is nice" | sed 's/money/$$/'
$$ is nice
$ foo="money"; echo "money is nice" | sed 's/'"$foo"'/$$/'
$$ is nice
$ foo="money"; echo "money is nice" | sed "s/$foo/$$/"
6756 is nice
最后一个发生是因为双引号在sed看到它之前将你的整个脚本暴露给shell,而shell将$$
解释为当前的PID。