Linux shell脚本“读取”命令

时间:2015-01-30 21:18:45

标签: linux bash shell command sh

所以,我是脚本新手,我遇到了一些问题。我需要执行的命令是:

read -p Enter_the_DEVICE_Bssid "device1" ; 
read -p Enter_the_DEVICE_Bssid "device2" ; 
read -p Enter_the_DEVICE_Bssid "device3"

该命令有效,但当我将其设置为变量时,即:

com="read -p Enter_the_DEVICE_Bssid "device1" ; 
read -p Enter_the_DEVICE_Bssid "device2" ; 
read -p Enter_the_DEVICE_Bssid "device3"" 

并执行它:$ com它不起作用。可能是因为read命令试图将我的输入设置为变量device1和; 。 关于如何解决它的任何想法?

2 个答案:

答案 0 :(得分:3)

您遇到了shell扩展内容的顺序问题。

一个更简单的例子:

$ command='echo one ; echo two'
$ $command
one ; echo two

$command的值中的分号被视为echo的参数的一部分,而不是两个echo命令之间的分隔符。

可能有办法解决这个问题,因此它可以按您想要的方式工作,但为什么要这么麻烦?只需定义一个shell函数。用我的简单例子:

$ command() { echo one ; echo two ; }
$ command
one
two
$ 

或使用你的:

com() {
    read -p "Enter_the_DEVICE_Bssid: " device1
    read -p "Enter_the_DEVICE_Bssid: " device2
    read -p "Enter_the_DEVICE_Bssid: " device3
}

请注意,我已添加":"在提示结束时。我还删除了不必要的分号和变量名周围的引号(因为参数必须是有效的变量名,它不需要引用)。

答案 1 :(得分:0)

您没有填写报价。

 com="read -p Enter_the_DEVICE_Bssid "device1"

报价总是寻找一对而你却错过了。

> com="read -p Enter_the_DEVICE_Bssid:  device1"
> $com
Enter_the_DEVICE_Bssid:abc123
> echo $device1
abc123

这里我使用的是bash shell。