我有一个非常简单的脚本,如下所示:
#!/bin/bash
VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'
echo $MOREF
Run Code Online (Sandbox Code Playgroud)
当我从命令行运行此脚本并将参数传递给它时,我没有得到任何输出.但是,当我运行$MOREF变量中包含的命令时,我能够获得输出.
我想知道如何获取需要在脚本中运行的命令的结果,将其保存到变量,然后在屏幕上输出该变量?
这与宣传的一样:
# example 1
#!/bin/bash
grep -ir 'hello world' .
Run Code Online (Sandbox Code Playgroud)
这不是:
# example 2
#!/bin/bash
argumentString="-ir 'hello world'"
grep $argumentString .
Run Code Online (Sandbox Code Playgroud)
尽管'hello world'在第二个例子中被引号括起来,但grep解释'hello为一个参数和world'另一个参数,这意味着,在这种情况下,'hello将是搜索模式world'并将成为搜索路径.
同样,这仅在从argumentString变量扩展参数时发生.grep 'hello world'在第一个示例中正确解释为单个参数.
谁能解释为什么会这样?有没有一种正确的方法来扩展一个字符串变量,它将保留每个字符的语法,以便shell命令正确解释它?
所以我正在尝试制作一个 bash 文件,每 10 分钟轮换一次我的 MAC 地址,每次分配一个随机的十六进制数字。我想要一个名为random_hexa分配给此命令的结果的变量:openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//'。然后我将获取该变量并稍后在脚本中使用它。
知道如何获取openssl命令的结果并将其分配给变量以供以后使用吗?
谢谢!
bash ×3
command-line ×1
expansion ×1
mac-address ×1
openssl ×1
quoting ×1
shell ×1
syntax ×1
variables ×1