我有一个非常简单的脚本,大致如下:
#!/bin/bash
VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'
echo $MOREF
当我从命令行运行这个脚本并向它传递参数时,我没有得到任何输出。然而,当我运行$MOREF变量中包含的命令时,我能够获得输出。
如何获取需要在脚本中运行的命令的结果,将其保存到变量中,然后在屏幕上输出该变量?
我有一个非常简单的脚本,大致如下:
#!/bin/bash
VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'
echo $MOREF
当我从命令行运行这个脚本并向它传递参数时,我没有得到任何输出。然而,当我运行$MOREF变量中包含的命令时,我能够获得输出。
如何获取需要在脚本中运行的命令的结果,将其保存到变量中,然后在屏幕上输出该变量?
当前回答
我知道三种方法:
功能适用于此类任务:**函数(){ls-l}通过说func来调用它。还可以评估另一种合适的解决方案:var=“ls-l”评估$var第三种是直接使用变量:var=$(ls-l)或var=`ls-l`
您可以很好地获得第三个解决方案的输出:
echo "$var"
而且以一种令人讨厌的方式:
echo $var
其他回答
正如他们已经向您指出的那样,您应该使用“倒勾”。
提议的另一种$(命令)也很有效,而且它也更容易阅读,但请注意,它仅适用于Bash或KornShell(以及由此派生的shell),因此,如果您的脚本必须在各种Unix系统上真正可移植,那么您应该更喜欢旧的backticks表示法。
这是另一种方式,很适合与一些无法正确突出显示您创建的每一个复杂代码的文本编辑器一起使用:
read -r -d '' str < <(cat somefile.txt)
echo "${#str}"
echo "$str"
有些人可能觉得这很有用。变量替换中的整数值,技巧是使用$(())双括号:
N=3
M=3
COUNT=$N-1
ARR[0]=3
ARR[1]=2
ARR[2]=4
ARR[3]=1
while (( COUNT < ${#ARR[@]} ))
do
ARR[$COUNT]=$((ARR[COUNT]*M))
(( COUNT=$COUNT+$N ))
done
我知道三种方法:
功能适用于此类任务:**函数(){ls-l}通过说func来调用它。还可以评估另一种合适的解决方案:var=“ls-l”评估$var第三种是直接使用变量:var=$(ls-l)或var=`ls-l`
您可以很好地获得第三个解决方案的输出:
echo "$var"
而且以一种令人讨厌的方式:
echo $var
Mac/OSX现在有旧的Bash版本,即GNUbash,版本3.2.57(1)-发布(arm64-apple-darwin21)。在这种情况下,可以使用:
new_variable="$(some_command)"
具体示例:
newvar="$(echo $var | tr -d '123')"
注意(),而不是Bash 4中通常的{}。