首页 > 系统相关 >Shell - $@ and $*

Shell - $@ and $*

时间:2023-11-25 19:12:44浏览次数:39  
标签:what Shell would space list tokens want

 

In Bash (and all POSIX-like shells), $@ or ${@} is a "special parameter" that expands to a list of all positional parameters (= command-line arguments). It is in that respect similar to $*, but with the addition that it can be double-quoted to expand to a list of individual tokens rather than one string containing all positional parameters separated by spaces(1).


(1) Actually, the arguments are not joined explicitly by "space", but rather by the first character of $IFS, the input field-separator variable, which however defaults to "space" in many shells. In the further text I will still use "space" for simplicity and assume that either you left $IFS at its default or changed it to your needs but know what you do.


So,

  • "$*" is equivalent to "$1 $2 $3 ... " and would be treated as "one word" whereas
  • "$@" is equivalent to "$1" "$2" "$3" ...  and would be treated as "several individual words".

Without quotes, both would simply be a space-separated list of words. The difference becomes important when the command-line arguments themselves are strings with spaces, as in

./my_script.sh parameter1 parameter2 "a whole sentence as parameter"
  • $* or $@ without quotes would expand to a list of seven individual tokens. This is rarely what you want.
  • "$*" would expand to one token consisting of seven space-separated words (parameter1 parameter2 a whole sentence as parameter). This is in most cases not what you want.
  • "$@" would expand to a list of 3 tokens, the first two being parameter1 and parameter2, and the last being the string a whole sentence as parameter including its spaces. This is what you will want in most cases, in particular when you want to use it as a list of tokens (to iterate over, to assign to an array, or to pass to a self-defined function).

标签:what,Shell,would,space,list,tokens,want
From: https://www.cnblogs.com/zhangzhihui/p/17855906.html

相关文章

  • 工具 | Vshell使用入门
    写在前面   "Vshell是一款go编写的主机群管理工具(RAT)"。    发现Vshell作者团队非常低调,项目Github上Readme介绍非常简短,网上也很少有使用介绍。写个基础入门,记录从配置到主机管理、搭建隧道。本文仅作为工具介绍,请勿用于任何违法场景。    未经授权请勿利用文章......
  • Windows-Xshell对多个终端同时执行命令(发送命令到多个会话)
    方法1:使用查看中的撰(zhuàn)写栏(1)、查看→撰写→撰写栏。 (2)、底部可以看到“撰写栏”,选择全部会话。 (3)、在撰写栏输入命令,回车后就会发送到所有会话窗口。方法2:使用工具中的发送键输入到所有会话(1)、工具→发送键输入到(K)→所有会话(A)。(2)、当窗口上面出现黄色栏时,......
  • Shell必备三剑客
    Top目录Sed——三剑客之一基本格式选项及含义命令flags标记及功能支持正则表达式,扩展正则表达式高级命令命令格式注意:命令示例字符串替换----'s'行内容替换——'c'删除——'d'添加行——'i'和'a'打印——'p'写文件——'w'读文件——'r'退出命令——'q'添加空白行高级玩法参考......
  • shell脚本——函数与数组
    函数函数和别名很像有些脚本会被反复使用alias脚本比较复杂函数脚本的别名使用函数可以避免代码重复,增加可读性,简化脚本定义函数名(){脚本}function函数名(){脚本}先定义在调用#!/bin/bashos(){ifgrep-iqcentos/etc/os-releasethenecho"该系统是cento......
  • Xshell连接不上虚拟机的解决办法汇总
    一:关于ping的问题1.虚拟机ping百度2.windows下pinglinux的ip地址3.linux下pingwindows二:防火墙的问题三:ssh服务四:VM中的还原默认设置还原后的更改设置五:相关服务是否打开六:卸载VM软件重装一:关于ping的问题1.虚拟机ping百度在虚拟机中ping百度看能不能先ping通,......
  • shell
    shell基础知识指定解析器#!/bin/bash#!/usr/bin/envbash系统环境变量加载顺序:/etc/profile->~/.bash_profile->~/.bashrc->/etc/bashrc->~/.bash_logout变量#只读变量readonlyvar#删除变量unsetvar#位置变量$1-$n系统环境变量特殊环境变量字符串......
  • shell 编程之循环语句与函数 一
    shell循环:一定要跳出循环的条件1、已知循环的次数(来10个新人新建10个账号)2、未知的循环的次数,但是有一个跳出条件(女朋友生气,道歉到原谅)循环语句for(已知次数)while(限定条件,条件如果成功执行,不成功则不执行)until(限定条件,条件成功不执行,不成功则执行) forfor......
  • shell脚本——循环脚本
    循环语句一定要有跳出循环的条件1、已知循环次数(来10个新人,新建10个账号)2、未知循环的次数,但是有一个跳出的条件(女朋友生气,道歉道到原凉)for循环:(已知次数)for 名称(自定义名称)in 词语; do 命令序列; done循环列表只是跟循环的次数有关如果循环列表有6个值,循环6......
  • Linux系统下shell的使用
    一、什么是shell文字操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。shell提供了你与操作系统之间通讯的方式。这种通讯可以以交互方式(从​​键盘......
  • VMware虚拟机如何联网、Xshell连接Linux虚拟机
     VMware虚拟机联网1、首先,在VMware界面单击虚拟机,点击编辑虚拟机设置,将网络适配器中的网络连接改为NAT模式。如下图所示: 2、然后,开启虚拟机,以root用户登录,进入终端,输入命令ifconfig查看当前系统所用的网卡接口,找到ens33。如下图: 3、输入以下指令:vim /etc/sysco......