bash - 如何使用 `$@` 作为单个参数执行链式命令?

标签 bash

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

$@

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

./script.sh "ls && clear"

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

最佳答案

维护“$@”接口(interface)

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

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

...您还需要将 $@ 更改为 "$@" (不带引号,$@ 完全相同as -- 意思是,具有 -- $*) 的所有错误。


如果您想传递数据,请使用代码中的带外额外参数来传递数据,以避免安全错误:

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" 工作。


仅接受一个参数

使用“$@”向用户 promise 将处理多个参数;但是,eval "$*"bash -c "$*" 一样,会忽略这些参数之间的区别,而 bash -c "$@" code> 默默地忽略第一个参数之后的参数,除非第一个参数是在了解该调用约定的情况下编写的。

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

eval "$1"

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

code=$1; shift; eval "$code"

关于bash - 如何使用 `$@` 作为单个参数执行链式命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52741567/

相关文章:

java - WSL Bash 未在 PATH 中找到 java

bash - 如何删除文件名中带引号的文件

bash - Nmap - RTTVAR 已经增长到超过 2.3 秒,下降到 2.0

bash - cygwin bash 脚本没有获取参数

bash - 作为 bash 脚本输入参数的文件列表

wordpress - 如何通过 Bash 重新生成 WordPress 缩略图?

string - 需要在一定数量的字符后拆分 bash 中的字符串

bash - "@a"运算符在 shell 扩展中有何用途?

bash - 从 linux bash 中的函数分配局部变量一个新值

ruby - 在 cron 中为 whenever 设置路径以便它可以找到 ruby