【问题标题】:Linux shell script "read" commandLinux shell 脚本“读取”命令
【发布时间】:2015-03-30 10:54:12
【问题描述】:

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

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 它不起作用。可能是因为读取命令试图将我的输入设置为变量 device1 和 ; . 关于如何解决它的任何想法?

【问题讨论】:

标签: linux bash shell command sh


【解决方案1】:

你没有完成报价。

 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。

【讨论】:

    【解决方案2】:

    您在 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
    }
    

    请注意,我在提示的末尾添加了“:”。我还删除了变量名周围不必要的分号和引号(因为参数必须是有效的变量名,所以不需要引用)。

    【讨论】: