这是我的名为ooo的bash脚本
#!/bin/bash
$1
这是命令
/ ooo' echo test'
输出是:
test
效果很好。但是试试吧..
/ ooo' cd /&& LS'
现在没有输出。
为什么没有输出?
答案 0 :(得分:2)
如果你的问题是"我怎么做我期望在这里发生的事情?",那么@ ooga的答案是完美的。
如果您的问题是"为什么这不符合我的预期?",那么答案会更加微妙。
我认为正在发生的事情(以及bash规则是错综复杂的,所以我在这里并非100%肯定)是
$1
被解析为一个单词的简单命令' (请参阅bash联机帮助页) - 一个单词只是$1
,扩展中的&&
不可见(特别是没有达到预期效果),因为该参数尚未扩展。cd / && ls
" cd
"," /
"," &&
& #34;和" ls
" cd
以下面三个单词作为参数运行。这意味着,正如William Pursell在他对你的问题的评论中指出的那样,cd
有三个论点,其中两个是忽略的。如果您使用
运行脚本./ooo 'echo / && ls'
你会看到这种情况发生,并且看到明显魔术&&
被传递给echo
命令只是一个普通的字符串。
答案 1 :(得分:1)
试试这个:
#!/bin/bash
eval "$1"