加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何用“bash -c”命令使用位置参数?

发布时间:2020-12-15 19:07:56 所属栏目:安全 来源:网络整理
导读:使用命令bash -c时,我想知道使用位置参数的最佳方式。 手册页指示-c选项: If there are arguments after the command_string,they are assigned to the positional parameters,starting with $0. 所以我猜想以下形式是正确的: $ bash -c 'printf "%s %s %
使用命令bash -c时,我想知道使用位置参数的最佳方式。

手册页指示-c选项:

If there are arguments after the command_string,they are assigned to the positional parameters,starting with $0.

所以我猜想以下形式是正确的:

$ bash -c 'printf "%s %s %sn" $0 $1 $2' param1 param2 param3
param1 param2 param3

然而I saw the following form,我不知道为什么会更好

$ bash -c 'printf "%s %s %sn" $1 $2' _ param1 param2
param1 param2

在这种情况下,字符_替换$ 0。

我知道,对于许多口译员来说,$ 0有一个特殊的含义(命令名称,所有的位置参数…),但在这种情况下,手册页很清楚。

那么,第一种形式有什么问题,而且有没有使用$ 0作为bash -c命令的第一个位置参数的缺点?

bash -c 'printf "%s %s %sn" $0 $1 $2' param1 param2 param3

上面的作品,但很多人会认为是一个不好的习惯进入。如果要将代码从-c字符串复制到脚本,那么它将失败。同样,如果要将脚本中的代码复制到-c字符串,则会失败。

相反,使用以下形式,$ 1意味着在脚本或shell函数中意味着的-c字符串中的相同内容:

bash -c 'printf "%s %s %sn" $1 $2 $3' _ param1 param2 param3

编程风格的一致性减少了错误。

shell对待$ 0不同

一个通常用$ @或$ *来引用脚本的所有参数。请注意,这些变量不包括$ 0:

$ bash -c 'echo "$*"' param1 param2 param3
param2 param3
$ bash -c 'echo "$@"' param1 param2 param3
param2 param3

$ 0是程序名称

在常规脚本中,$ 0是脚本的名称。因此,当使用bash -c时,有些人喜欢为$ 0参数使用一些有意义的名称,例如:

bash -c 'printf "%s %s %sn" $1 $2 $3' bash param1 param2 param3

要么:

bash -c 'printf "%s %s %sn" $1 $2 $3' printer param1 param2 param3

如果-c字符串生成错误,则此方法具有明显的优势。例如,考虑这个脚本:

$ cat script.sh
#!/bin/bash
bash -c 'grepp misspelling "$1"' BadPgm file.txt

如果我们运行脚本,将生成以下输出:

$ ./script.sh 
BadPgm: grepp: command not found

这将错误的来源标识为bash -c字符串中的命令。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读