Linux shell 脚本 "read"命令

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

最佳答案

您遇到了 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
}

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

关于Linux shell 脚本 "read"命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28244793/

相关文章:

linux - AWK解释 awk -F'AUTO_INCREMENT =' ' NF==1{print "0";next}{sub(/.*/,"",$2);print $2}'

shell - 将 shell 文件转换为 Windows 批处理文件

linux - Java 类路径中 '*' 的特殊含义是什么?

Linux 命令动态将 GB 转换为 MB

Bash 基本名称语法

linux - Linux 中的恢复脚本

linux - 从远程服务器查找 git 分支的名称

bash - AWS 弹性 Beanstalk : the command eb list shows no environments

c++ - 连接后连接丢失 -> 服务器 TCP boost.ASIO

linux - 《Linux 内核模块程序员指南》中 chardev.c 示例的问题