相关疑难解决方法(0)

Bash中"$ @"和"$*"有什么区别?

在我看来,它们都存储了所有命令行参数.

两者之间有区别吗?

variables bash command-line-arguments

65
推荐指数
2
解决办法
3万
查看次数

为什么bash"test -n"命令为$!($ at)位置参数提供了错误的结果而"!test -z"有效?

使用$@一个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 shell

7
推荐指数
2
解决办法
621
查看次数

bash脚本中的$ @和$*之间的差异

我是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)

也许我不明白这两个特殊变量的实际用途以及我的例子是否正确.我想用一个很好的例子来弄清楚这一点.

bash

5
推荐指数
1
解决办法
936
查看次数

标签 统计

bash ×3

command-line-arguments ×1

shell ×1

variables ×1