在我看来,它们都存储了所有命令行参数.
两者之间有区别吗?
使用$@
一个bash内test
表达产生奇怪的结果.
这里有一个最小的测试脚本来重现问题(在相同的测试,其中:替代配方中做通无误差):
#! /bin/bash
# file path: ./bash_weirdness.sh
echo "args: '$@'"
echo "--- empty ---"
if test "" ; then echo "1.A1.TEST - not empty?"; fi
if test -z "" ; then echo "1.A2.EMPTY - empty?"; fi
if test -n "" ; then echo "1.A3.NE - not empty?"; fi
if ! test "" ; then echo "1.B1.NOT.TEST - empty?"; fi
if ! test -z "" ; then echo "1.B2.NOT.EMPTY - not empty?"; fi
if …
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)
也许我不明白这两个特殊变量的实际用途以及我的例子是否正确.我想用一个很好的例子来弄清楚这一点.