在我看来,它们都存储了所有命令行参数.
两者之间有区别吗?
我正在使用bash脚本.jar从任何位置调用和执行文件,而不必经常输入其显式路径.
该.jar要求在执行中指定的其他变量参数,因为这些可以是任何东西,他们不能被硬编码到脚本.
共有3个变量,第一个指定要执行的2个操作中的1个.jar,第二个指定要执行此操作的目标文件,第三个指定操作要创建的文件的名称.
我目前使用的脚本是:
#!/bin/bash
java -jar "C:\path\to\file.jar" "$1" "$2" "$3"
Run Code Online (Sandbox Code Playgroud)
我不是很了解的bash脚本,但在寻找另一种答案我的困境(现已修复),我碰到"$@"和"$*"引用命令行参数的时候.做更多搜索带我到这个网站:如何维基:如何在bash脚本中读取命令行参数,但我无法找到任何有关这些参数的可靠信息,而无需通过大量的高级bash编程我的头.
所以现在我已经永远漫步,我的问题相对简单:
我可以"$1" "$2" "$3"用"$@"或替换"$*",如果是,哪个更好用?
那些命令之间的区别是什么?
bash arguments argument-passing command-line-arguments command-line-parsing
如果没有给出位置参数,在 Bash 中测试最惯用的方法是什么?有很多方法可以检查这一点,我想知道是否有一种首选方法。
一些方法是:
((! $# )) # check if $# is 'not true'
(($# == 0)) # $# is 0
[[ ! $@ ]] # $@ is unset or null
Run Code Online (Sandbox Code Playgroud) parameters bash idioms command-line-arguments conditional-statements
我是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)
也许我不明白这两个特殊变量的实际用途以及我的例子是否正确.我想用一个很好的例子来弄清楚这一点.