`
younglibin
  • 浏览: 1210899 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

shell中$*与$@的区别

 
阅读更多
 

$*
所有的位置参数,被作为一个单词.
$@
与$*同义,但是每个参数都是一个独立的""引用字串,这就意味着参数被完整地传递,
并没有被解释和扩展.这也意味着,每个参数列表中的每个参数都被当成一个独立的
单词.

 

$@ 和 $* 只在被双引号包起来的时候才会有差异
双引号括起来的情况:
$*将所有的参数认为是一个字段
$@ 以IFS(默认为空格)来划分字段,如果空格在“”里面,不划分。

 

下边给个例子看一下:

一、$*  不添加 “” 

[webadmin@www testfor]$ vi  printFile
  1 #!/bin/bash
  2 
  3 var=(1 2 3 4)
  4 for fi in ${var[*]}; do
  5   echo "-----"  
  6   echo $fi
  7 done

结果:
[webadmin@www testfor]$ ./printFile 
-----
1
-----
2
-----
3
-----
4

、$@  不添加 “” 

[webadmin@www testfor]$ vi  printFile
  1 #!/bin/bash
  2 
  3 var=(1 2 3 4)
  4 for fi in ${var[@]}; do
  5   echo "-----"  
  6   echo $fi
  7 done

结果:
[webadmin@www testfor]$ ./printFile 
-----
1
-----
2
-----
3
-----
4

 三、$*添加双引号

[webadmin@www testfor]$ vi  printFile
  1 #!/bin/bash
  2 
  3 var=(1 2 3 4)
  4 for fi in "${var[*]}"; do
  5   echo "-----"  
  6   echo $fi
  7 done

结果:
[webadmin@www testfor]$ ./printFile 
-----
1 2 3 4

将所有的参数解析为 一个参数

 四、$@  添加双引号

 

[webadmin@www testfor]$ vi  printFile
  1 #!/bin/bash
  2 
  3 var=(1 2 3 4)
  4 for fi in "${var[@]}"; do
  5   echo "-----"  
  6   echo $fi
  7 done

结果:

[webadmin@www testfor]$ ./printFile 
-----
1
-----
2
-----
3
-----
4

和  $*  , $@没有加上引号的结果一直

 

五、数据修改:

[webadmin@www testfor]$ vi  printFile
  1 #!/bin/bash
  2 
  3 var=(1 "2 3" 4)
  4 for fi in "${var[@]}"; do
  5   echo "-----"  
  6   echo $fi
  7 done

结果:
[webadmin@www testfor]$ ./printFile 
-----
1
-----
2 3
-----
4

将数组中 的 2和3 印在括号内 , 经过$@会解析为一个 字符串参数

 

 

综上可以看到 , 我们实际使用中还是使用$@  是最好的选择

 

 

 

[webadmin@www testfor]$ vi  printFile
  1 #!/bin/bash
  2 
  3 var=(1 "2 3" 4)
  4 for fi in  /yazuo_apps/test/ch02/*; do
  5   echo "-----"  
  6   echo $fi
  7 done

 

分享到:
评论

相关推荐

    浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释

    例如,在脚本中记录日志时,可以使用`$$`来标识该日志条目与哪个Shell进程相关联。 **示例:** ```bash echo "This script is running with PID: $$" ``` #### $! - 最后运行的后台Process的PID `$!` 保存的是...

    Shell编程中的特殊变量之进程状态变量介绍

    进程状态变量 1、$$获取当前shell的进程号(PID) 2、$!执行上一个指令的PID 3、$?...$*和$@的区别 $*将所有的参数视为单个字符串,相当于“$1$2$3” $@将每个参数视为单个的字符串,保留命令行中的任

    shell十三问

    九、$@与$*的区别 $@和$*都代表命令行参数,但在双引号中,$@会按每个参数分别处理,$*则会将所有参数视为一个字符串。 十、&&与||的差异 &&表示逻辑与,前一个命令成功后才会执行下一个命令;||表示逻辑或,前一个...

    Shell十三问-ChinaUnix精华贴整理

    10. **$@与$*的区别** `$@`和`$*`都用于传递命令行参数,但在双引号中,`$@`会以每个参数为一个元素,`$*`则将所有参数视为一个字符串。 11. **&&与||的区别** `&&`和`||`是逻辑操作符。`&&`表示条件语句,前一个...

    Linux Shell 脚本攻略

    - **$@ 和 $***:两者都代表所有参数,但使用双引号时有区别,$@会保留每个参数的独立性。 4. **流程控制** - **条件语句**:if-else、case结构用于根据条件执行不同代码块。 - **循环语句**:for、while、until...

    4种shell的区别

    在Linux环境中,Shell作为用户与操作系统之间的交互界面,扮演着极其重要的角色。不同的Shell具有不同的特性和语法结构,这使得它们适用于不同场景下的需求。本文将详细探讨四种常见的Shell——C Shell (csh)、TC ...

    B shell与 C shell的区别

    B shell与 C shell的区别 B shell和C shell都是Linux操作系统中的shell类型,它们之间存在一些关键的区别。 首先,让我们从B shell开始。B shell,全称为Bourne shell,是UNIX最初使用的shell。它在每种UNIX上都...

    Shell编程大全 高清PDF版

    - Shell命令行参数:学习如何处理命令行输入的参数,以及特殊字符如$@、$*的区别。 - 输入/输出重定向:掌握如何将命令的输出重定向到文件,或者从文件读取输入。 2. **Shell语法** - 条件表达式与测试命令:...

    Shell开发教程.docx

    **Shell脚本与编译型语言的主要区别**: - **解释执行 vs 编译执行**:Shell脚本是逐行解释执行的,而编译型语言如C/C++需要先编译成二进制代码再执行。 - **动态类型 vs 静态类型**:Shell脚本变量类型可以在运行...

    shell编程13问

    - **$@与$***:它们在脚本中用于处理位置参数,$@代表所有位置参数的列表,而$*将所有位置参数视为一个单一的字符串。 - **逻辑运算符&&与||**:用于Shell中的命令组合,&&表示前一个命令执行成功才执行后一个命令...

    shell常用命令

    - **5.3** `$@` 和 `$*` 的区别: - `$@`:每个位置参数都被视为独立的。 - `$*`:所有位置参数作为一个整体传递。 #### 六、Shell 算术运算符 - **6.1** 基本算术运算符包括:`+`, `-`, `*`, `/`, `%` 等。 - *...

    Linux的Shell命令详解

    在Linux环境中,Shell是一种用户界面,允许用户通过命令行与操作系统进行交互。它不仅提供了强大的脚本编程功能,还支持各种实用的内置命令。 **位置变量:** 1. **$0**: 表示当前正在执行的脚本文件的名称。这在...

    shell 13问 简体中文版.pdf

    通过以上知识点的讲解,我们可以了解到Shell不仅是Linux系统中重要的组成部分,也是用户与系统交互的重要工具。了解Shell的基本概念、Shell与Kernel的关系以及如何通过命令行与系统进行交互对于深入学习Linux系统...

    shell 十三问

    `$@`与 `$*` 的区别 - **`$@`**:当作为单独参数传递给脚本或函数时,每个参数都会保持独立。 - **`$*`**:所有参数作为一个整体传递,中间由空格分隔。 #### 10. `&&`与 `||` 的区别 - **`&&`**:逻辑与操作符...

    shell脚本与Makefile区别.docx

    "shell脚本与Makefile区别" shell 脚本和 Makefile 是两个不同的工具,它们都用于自动化构建和编译过程,但是它们有很大的不同之处。本文将详细介绍 shell 脚本和 Makefile 的区别。 首先,shell 脚本和 Makefile ...

    linux shell script tutorial_v2_r5.pdf

    - 特殊变量如$#, $*, $@等的用途。 **4.17 创建使用消息** - 提供帮助信息或错误提示。 **4.18 Exit命令** - 结束脚本执行,可带返回码。 **4.19 Case语句** - 用于模式匹配和分支选择。 **4.20 处理大小写...

    13_questions_of_shell, shell十三问--shell教程(markdown 版本).zip

    Shell还有预定义变量,如`$0`表示脚本名,`$#`表示参数数量,`$*`和`$@`表示所有参数。 6. **条件语句和循环结构** `if`语句用于条件判断,如`if [ condition ]; then ... fi`。`for`、`while`和`until`循环用于...

    Shell脚本用for循环遍历参数的方法技巧

    下面是两个示例来演示`$*`与`$@`的区别: ```bash #!/bin/bash number=11 if [ $# -eq 0 ];then echo "Usage: $0 + canshu" exit $number fi for i in $* # 在$*中遍历,每个参数被视为独立的,循环次数...

Global site tag (gtag.js) - Google Analytics