将两个定义为变量中字符串的命令组合起来并作为一个命令运行

将两个定义为变量中字符串的命令组合起来并作为一个命令运行

我可以加入两个定义为字符串的命令并作为一个命令运行吗?例如

var="ls -alt"
var2="| grep usersfile"
var3="| grep usersfolder"

以下连接命令的示例不起作用。

A。'{$var & $var2;}'

b.'{$var & $var3;}'

我什么是什么:

A。跑步"$var $var2"并获取"ls -alt | grep usersfile"

或者

b.运行"$var $var3"并获取"ls -alt | grep usersfolder"

答案1

是的,您可以使用 来做到这一点eval

$ var="ls -alt"
$ var2="| grep usersfile"
$ var3="| grep usersfolder"
$ eval "$var$var2"
< Output of ls -alt | grep userfile >
$ eval "$var$var3"
< Output of ls -alt | grep usersfolder >

答案2

你可能不应该这样做。根据您实际想要完成的任务,可能还有其他选择:

如果您只是想有一个动态选项来选择搜索字符串,您可以这样做:

#!/bin/bash
pattern=$1

ls -alt | grep "${pattern:-.}"

这将搜索您的第一个位置参数是什么,或者如果没有提供任何参数。

或者,如果您尝试在某些条件下采取行动:

#!/bin/bash

cmd=(ls -alt)
p1=usersfile
p2=usersfolder

if [[ condition1 ]]; then
    p=$p1
elif [[ condition2 ]]; then
    p=$p2
fi

"${cmd[@]}" | grep "$p"

或者在一个函数中:

#!/bin/bash

ls_func () {
    local p=$1
    ls -alt | grep "${p:-.}"
}

while getopts p:c: opt; do
    case $opt in
        c)  command=$OPTARG;;
        p)  pattern=$OPTARG;;
    esac
done

if [[ $command == 'ls' ]]; then
    ls_func "$pattern"
fi

相关内容