Linux开发讲课17--- 在shell脚本中,如何将一个命令存储在一个变量中

问:

将一个命令保存到一个变量中,以便稍后再使用(不是命令的输出,而是命令本身)。

有一个简单的脚本如下:

command="ls";
echo "Command: $command"; #Output is: Command: ls
b=`$command`;
echo $b; #Output is: public_html REV test... (command worked successfully)

然而,当尝试一些更复杂的东西时,它失败了。例如,如果这样做

command="ls | grep -c '^'";

输出为:

Command: ls | grep -c '^'
ls: cannot access |: No such file or directory
ls: cannot access grep: No such file or directory
ls: cannot access '^': No such file or directory

如何将这样(带有管道/多个命令)的命令存储在变量中以供以后使用?

答案:

对于带有管道或重定向的组合命令最推荐的方式是将其封装到一个函数里,然后在需要时直接调用即可。

对于命令 ls | grep -c '^' 可以写为如下形式:

func1() {
    ls | grep -c '^'
}

cd /path/to/work

# when need
func1

如果需要将 func1 写为一行,则代码如下:

func1() {  ls | grep -c '^'; }

这里需要在 {} 里面命令的末尾加上分号 ;

一个高赞回答是使用 eval,代码如下:

x="ls | wc"
eval "$x"
y=$(eval "$x")
echo "$y"

但是其中 eval 是一个非常容易引发错误的内置命令,在没有警告用户可能存在不可预料的解析行为风险的情况下,不应推荐使用它。使用 eval 命令时需要非常小心,因为它可以使得代码可读性较差并且容易引入安全漏洞。朋友们有踩到过 eval 命令的坑吗,可以在评论区留言交流一下。

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值