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

前端之家收集整理的这篇文章主要介绍了如何用“bash -c”命令使用位置参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用命令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 %s\n" $0 $1 $2' param1 param2 param3
param1 param2 param3

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

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

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

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

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

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

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

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

bash -c 'printf "%s %s %s\n" $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 %s\n" $1 $2 $3' bash param1 param2 param3

要么:

bash -c 'printf "%s %s %s\n" $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字符串中的命令。

猜你在找的Bash相关文章