zg c Asked: 2023-06-06 19:33:13 +0800 CST2023-06-06 19:33:13 +0800 CST 2023-06-06 19:33:13 +0800 CST 带空格的 shell 参数作为文件而不是命令传递 [重复] 772 我看过这个问答,但似乎总是将参数视为文件。 我想将此链接diff <(ls old) <(ls new)中的命令转换为一个接收两个参数的函数,尽管它有些多余。 我试过这只是 arg 替换: d2c(){ diff <($1) <($2) } 然后跑d2c "objdump -d foo1" "objdump -d foo2"秀d2c:1: no such file or directory: objdump -d foo1 使用fifo,上述问题仍然存在。 问:我怎样才能像'"objdump -d foo1"'一样传递arg,然后让它作为命令运行? shell-script 1 个回答 Voted Best Answer Stéphane Chazelas 2023-06-06T20:08:02+08:002023-06-06T20:08:02+08:00 看起来你想要那些$1并且$2被解释为 shell 代码而不是要执行的命令的名称,所以你需要: d2c() { diff <(eval " $1") <(eval " $2") } (注意前导空格以避免名称以 开头的命令出现问题-)。 您还需要确保在将这些代码传递给时使用单引号而不是双引号,以d2c消除引入命令注入漏洞的风险。 d2c 'echo "$var1"' 'echo "$var2"; echo "$var3"' 不是 d2c "echo $var1" "echo $var2; echo $var3" 例如。
看起来你想要那些
$1
并且$2
被解释为 shell 代码而不是要执行的命令的名称,所以你需要:(注意前导空格以避免名称以 开头的命令出现问题
-
)。您还需要确保在将这些代码传递给时使用单引号而不是双引号,以
d2c
消除引入命令注入漏洞的风险。不是
例如。