如何使用$$作为单个参数执行链接命令?

时间:2018-10-10 13:38:59

标签: bash

我有一个bash文件,该文件最后执行$@

$@

并且它接收链接命令的单个参数。

./script.sh "ls && clear"

它执行第一个命令并考虑休息作为参数。
我想按正常执行所有链接的命令。

2 个答案:

答案 0 :(得分:3)

维护“ $ @”界面

如果要使用Shell语法(复合命令,重定向等),则需要调用Shell。因此:

./script.sh bash -c 'ls && clear'

...您还需要将$@更改为"$@"(不带引号的$@与-完全相同,这意味着-拥有所有{ 1}})。


如果您要传递数据,请在代码中附加带外参数以避免安全性错误:

$*

与其他方法不同,这仍然可以使dir=/tmp # but unlike eval, this is still safe with *any* directory name ./script.sh bash -c 'ls "$1" && clear' _ "$dir" 正常工作。


只接受一个参数

使用./script.sh printf '%s\n' "first line" "second line"向用户保证将处理多个参数;但是,"$@"eval "$*"一样,会丢弃这些参数之间的区别,而bash -c "$*"会默默忽略第一个参数之后的参数,除非第一个参数是在了解调用约定的情况下编写的。

要仅接受一个参数并将其解析为代码,请使用:

bash -c "$@"

要仅将第一个参数作为代码接受,并在该代码的上下文中将后续参数保留为eval "$1" $1等,请使用:

$2

答案 1 :(得分:1)

您可以在sh文件上使用以下命令:

#!/usr/bin/env bash

bash -c "$@"