我可以加入两个定义为字符串的命令并作为一个命令运行吗?例如
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