首页 > 其他分享 >Bash中$10 和 ${10}的区别

Bash中$10 和 ${10}的区别

时间:2024-09-08 11:36:04浏览次数:1  
标签:11 10 第十个 区别 echo 参数 Bash

#!/bin/bash
funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

结果

第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

在 Bash 脚本中,当你尝试访问位置参数(如 $1$2, ..., $10$11 等)时,需要注意一个特殊的规则,这个规则影响了 $10 和 ${10} 的处理方式。

当位置参数的编号是两位数时(即 $10$11, ...),如果仅使用 $10 这样的形式,Bash 会尝试将其解析为 $1 后跟一个字符 0 的变量扩展,而不是一个单独的位置参数。然而,当你使用 ${10} 或 ${11} 这样的花括号语法时,Bash 会正确地将其识别为第 10 个或第 11 个位置参数。

在你的脚本中:

  • echo "第十个参数为 $10 !" 实际上会被 Bash 解释为尝试访问名为 $1 的变量,然后在其后附加了一个字符 0(尽管这不是一个有效的变量名,但 Bash 的行为是尝试查找 $1 然后附加 0,而不是按预期访问第 10 个参数)。由于 $1 是第一个传递给函数的参数(在这个例子中是 1),这个命令的行为可能不是你所期望的,它可能不会显示任何内容(如果 $1 是空或未定义)或者如果 $1 有值,则会显示该值后附加一个 0

  • echo "第十个参数为 ${10} !" 正确地使用了花括号语法来指定这是一个两位数编号的位置参数,因此 Bash 会输出第 10 个参数的值(在这个例子中是 34)。

因此,当你想访问两位数编号的位置参数时,始终应该使用 ${} 语法来避免歧义。这是编写 Bash 脚本时的一个良好实践。

总结:

  • 使用 $10 时,Bash 可能会误解你的意图。
  • 使用 ${10} 来明确指定你正在访问的是第 10 个位置参数。

原文链接:https://javaguide.cn/cs-basics/operating-system/shell-intro.html

标签:11,10,第十个,区别,echo,参数,Bash
From: https://www.cnblogs.com/lbzwd/p/18402708

相关文章

  • 【代码随想录Day10】栈与队列Part01
    232.用栈实现队列题目链接/文章讲解/视频讲解:用栈实现队列classMyQueue{Stack<Integer>stackIn;Stack<Integer>stackOut;publicMyQueue(){stackIn=newStack<>();stackOut=newStack<>();}publicvoidpush(int......
  • v-if和v-show的区别
    v-if和v-show是Vue.js中常用的指令,用于根据条件来控制元素的显示和隐藏。它们的区别主要体现在以下几个方面:渲染方式:v-if是基于条件进行的“惰性渲染”,即只有在条件为真时才会渲染对应的组件或元素,而在条件为假时会直接移除对应的组件或元素。这意味着在条件为假时,相关的组件或......
  • Calico和flannel区别
    Calico和Flannel是Kubernetes中常用的网络插件(CNI插件),它们在设计理念、功能和使用场景上有一些显著的区别。以下是它们的主要区别:1.网络架构Calico:使用了路由(Layer3)模型,支持IP路由。采用了BGP(边界网关协议)进行网络路由,这使得它能够在大规模集群中表现出色。支持多种网络......
  • 新电脑Win11系统想要降级为Win10怎么操作?
    前言现在的电脑大部分都是Windows11系统,组装机还好一些,如果想要使用Windows10,只需要在安装系统的时候选择Windows10镜像即可。但是对于新笔记本、厂商的成品机、一体机来说,只要是全新的电脑,基本上都是Windows11了。有部分小伙伴就觉得,Windows11也挺好,为啥非得要Windo......
  • 在Windows 10中,系统通常会有以下默认用户账户:在Windows 10中,默认用户账户有以下几种权
    在Windows10中,系统通常会有以下默认用户账户:Administrator(管理员):这是一个系统内置的账户,具有最高的权限。默认情况下,这个账户在安装Windows10时是禁用的,不会显示在登录屏幕上。Guest(来宾):这个账户允许临时用户使用计算机,没有访问用户数据或进行系统更改的权限。默认情......
  • 1.10 单身狗进化
    这一天晚上,弯通又做梦了,并且梦到了一个帅气的男孩纸!这个男孩给了弯通一个数字n。男孩离开前告诉弯通,n!(n的阶乘)的位数就是距离弯通脱单的天数。矜(ji)持(ke)的弯通想知道自己还有多久能脱单,快写个程序帮助他!这题转换为数学问题也就是求n的阶乘然后求结果的位数以下是我写的代码......
  • 优爱酷酷采系统软件支持批量链接采集可指定深度、资源嗅探支持10大类资源,批量下载短视
    图文详情如何批量嗅探资源采集网页链接?图像音频视频JsCssHtmlJson文档字体压缩其它自动下载链接转换仿站批量格式转换.webP,.avif格式图片下载,优爱酷酷采系统-想采就采把握精彩留住美好下载:UiCool.cn 【优爱酷酷采系统】✅链接:https://www.alipan.com/s/LxDVE3pjN......
  • 【愚公系列】2023年10月 GDI+绘图专题 DrawString
    ......
  • import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from ‘axios
    在 importaxios,{AxiosInstance,AxiosRequestConfig,AxiosResponse}from'axios';  中: 不加花括号(只导入axios): -你只能使用默认导入的 axios  对象本身来进行HTTP请求,例如 axios.get('/api/endpoint') 。-没有导入特定的类型定义,在使用相关对象......
  • Win10电脑网络正常,其他浏览器可以打开网页,但Chrome浏览器打不开网页,开发者工具中看请
    问题现象:Win10电脑网络正常,可以ping通baidu.com,qq.com,域名正常解析。其他浏览器edge可以打开网页但Chrome浏览器打不开网页,开发者工具中看请求未发出,左上角一直转圈圈解决办法:谷歌浏览器右上角,点击三个点按钮-->然后选择设置,高级--> 系统 -->选择代理设置。打开......