我在尝试创建函数时遇到了一个问题,我有一个代码来检测连接到usb的蓝牙加密狗,这是代码的第一部分,它工作得很好,如果usb确实插入了电源,那么它会检查其统计数据(向上或向下),并将其存储在bt_stat变量中,毕竟它是打印机,到目前为止一切都很好
#!/bin/bash
clear
echo "Looking for bluetooth USB"
bt_id=`lsusb|grep ASUS|cut -c24-32`
bt_stat="0"
if [[ -z "$bt_id" ]]; then
echo "not found"
exit 1
else
bt_stat=`hciconfig|head -3|tail -1|grep "UP|DOWN"`
echo "USB BT found"
fi
echo $bt_stat
输出:
找到USB BT
正在运行
当我试图将该变量传递给函数时,问题就开始了
function disp
{
eval st1="$1"
echo "Status: ${st1}"
}
它本身的功能也起作用,我已经传递了一个固定的变量和输出,正如预期的那样,是"状态:测试">
var="TEST"
disp "${var}"
但是,当我把函数放在代码的开头时,即使我不使用它,也没有将命令分配给变量bt_stat,这是什么原因造成的?在程序中创建一个将命令输出分配给变量的函数时,我是否必须考虑一些因素?
下面是代码与函数的关系,很抱歉问题太长,但我希望它是清晰的
#!/bin/bash
function disp
{
eval st1="$1"
echo "Status: ${st1}"
}
clear
echo "Looking for bluetooth USB"
bt_id=`lsusb|grep ASUS|cut -c24-32`
bt_stat="0"
if [[ -z "$bt_id" ]]; then
echo "not found"
exit 1
else
bt_stat=`hciconfig|head -3|tail -1|grep "UP|DOWN"`
echo "USB BT found"
fi
echo $bt_stat
输出:
找到USB BT
另一行显示如果我用disp"\${bt_stat}">调用函数,但分配仍然没有发生
状态:
我想你可以做得更容易:
#!/bin/bash
function disp
{
local st1="$1"
echo "Status: ${st1}"
}
clear
echo "Looking for bluetooth USB"
bt_id=`lsusb|grep ASUS|cut -c24-32`
bt_stat=""
if [[ -z "$bt_id" ]]; then
echo "not found"
exit 1
else
bt_stat=`hciconfig|head -3|tail -1|grep "UP|DOWN"`
echo "USB BT found"
fi
disp "$bt_stat"