在许多SO问题和bash教程中,我看到我可以通过两种方式访问bash脚本中的命令行参数:
$ ~ >cat testargs.sh
#!/bin/bash
echo "you passed me" $*
echo "you passed me" $@
Run Code Online (Sandbox Code Playgroud)
结果如下:
$ ~> bash testargs.sh arg1 arg2
you passed me arg1 arg2
you passed me arg1 arg2
Run Code Online (Sandbox Code Playgroud)
$*和之间有什么区别$@?
应该何时使用前者,何时使用后者?
在我看来,它们都存储了所有命令行参数.
两者之间有区别吗?
在shell脚本中,$@和之间有什么区别$*?
获取脚本参数的首选方法是哪一种?
不同的shell解释器之间是否存在差异?
在我的script.sh:
aa=$@
bb=$*
echo $aa
echo $bb
Run Code Online (Sandbox Code Playgroud)
运行时:
source script.sh a b c d e f g
Run Code Online (Sandbox Code Playgroud)
我明白了:
a b c d e f g
a b c d e f g
Run Code Online (Sandbox Code Playgroud)
$@和之间有什么区别$*?
我是bash的新手,我正在学习它,而且我怀疑使用$@和之间的真正区别S*.
我在这里红色Bash特殊参数
我知道两者都扩展到位置参数,但差异发生在双引号内.顺便说一句"$@" = "$1" "$2"..."$n"可能不同于"S*" = "$1$2...$n".
我尝试用一个简单的脚本来理解它:
if [ $# -gt 0 ]; then
echo "Your command line contains $# arguments"
else
echo "Your command line contains no arguments"
exit fi
echo "Params are: "
echo $@
echo $*
echo "$@"
echo "$*"
Run Code Online (Sandbox Code Playgroud)
如果我像这样在终端中执行我的脚本 ~./my_script par1 par2 par3
结果总是一样的:
Params are:
par1 par2 par3
par1 par2 par3
par1 par2 par3
par1 par2 par3
Run Code Online (Sandbox Code Playgroud)
也许我不明白这两个特殊变量的实际用途以及我的例子是否正确.我想用一个很好的例子来弄清楚这一点.
我们需要监视目录的大小(例如InfluxDB的数据目录)以在Grafana中设置警报.如上所述:如何配置telegraf将文件夹大小发送到InfluxDB,没有内置的插件.
我们不介意使用inputs.execTelegraf 的部分.目录不是很大(低文件数+ dircount),所以深度扫描(如使用du)对我们来说很好.
我们需要监控的目录之一是/var/lib/influxdb/data.
什么是一个简单的脚本来执行,有什么警告?