如何制作 bash 知道 |是管道而不是字符串



嗨,我的问题很简单。我想在命令提示符下执行此操作。

var="ls | cat"
$var

现在我知道当我尝试手动执行此操作时

ls | cat

Bash把|当作一个特殊的东西。我不知道它叫什么,我知道 |它被称为管道,但我的意思是 bash 需要 |作为...并且实际上制作了一根烟斗。我还认为,当我尝试做$var bash 实际上需要 |作为字符串而不是管道。 好吧,我的问题是我怎样才能实现 bash |实际上是一根烟斗,而不是一根绳子。谢谢,我希望我清楚我的观点。

简单的解决方案:使用 eval

var="ls | cat"
eval $var

bash 将参数解释为eval,就好像您在命令行上键入了它一样。

当然,请记住将eval与用户输入一起使用的安全风险,以防这对您的程序造成问题。

这可能适用,也可能不适用 - 但听起来您可能正在寻找alias命令。 您可以执行alias var="ls | cat",然后在命令提示符下执行var,它会将其视为编写ls | cat<</p>

div class="ans> 与其

尝试将可执行代码嵌入到变量中(应该用于保存数据,而不是代码),不如使用 shell 函数,该函数旨在保存代码:

my_func () {
    ls | cat
}

|被称为管道,我没有听到任何其他命名。基本上,左侧命令输出的流将作为其右侧命令的输入。在您的情况下,ls输出进入流(即临时文件),并且该流被馈送到cat . cat打印文件的内容,ls流非常像文件。

现在,您正在尝试bash解释变量var。为此,请尝试:

var=`ls | cat`
$var

在我的电脑上,我得到这个:

-bash: Applications: command not found

因为在我的情况下,$var扩展到Applications Documents Downloads,我的ls的输出。粗略地说,bash认为这是我希望他执行的命令。如果您的意图不是执行$var内容而是打印内容,请尝试:

var=`ls | cat`
echo $var
这里

不需要猫,只需使用ls -1,正如其他答案所说,您可以将其别名或放入函数中。

例如,如果要覆盖ls以在新行上打印每个文件,请执行类似操作

> alias ls='command ls -1'
> ls 
file1
file2
etc...

并将其放在像~/.bashrc这样的bash init文件中,如果您想永久更改

1)函数适用于以下任务:

func (){
ls | cat
}

通过说func来调用它

2)另一个合适的解决方案也可以eval

eval 将字符串作为其参数,并像在命令行上键入该字符串一样对其进行计算。(如果传递多个参数,则它们首先用它们之间的空格连接。

var="ls | cat"
eval $var

相关内容

  • 没有找到相关文章

最新更新