首页 > 系统相关 >Shell脚本--变量

Shell脚本--变量

时间:2023-04-18 09:55:05浏览次数:37  
标签:Shell 变量 val -- echo sh root

1. 定义变量

Shell 支持一下三种定义变量的方式:
variable=value 
variable='value' 
variable="value"

variable 是变量名,value 是赋给变量的值。如果 value 不包含任何空白符,那么可以不用引号;否则就必须使用引号。注意,赋值号=的周围不能有空格。

Shell 变量的命名规范和大部分编程语言都一样:
  • 变量名由数字、字母、下划线组成;
  • 必须以字母或者下划线开头;
  • 不能使用 Shell 里的关键字(通过 help 命令可以查看保留关键字)。

2. 使用变量

使用一个定义过的变量,只要在变量名前面加符号 $ 即可,如:
#!/bin/bash

val=hello
echo $val
echo ${val}

其结果为:

hello
hello

变量名外面的花括号 {} 是可选的,加不加都可以。但是,建议加上,会给你避免不少麻烦。

3. '' 和 ""的区别

定义变量时,变量的值可以由单引号 '' 包围,也可以由双引号 "" 包围,它们到底有什么区别呢?下面以示例来说明:
#!/bin/bash

val=world
str1='hello ${val}'
str2="hello ${val}"
echo ${str1}
echo ${str2}
str3='ls: $(ls)'
str4="ls: $(ls)"
echo ${str3}
echo ${str4}

其结果为:

hello ${val}
hello world
ls: $(ls)
ls: cfind.sh cstring.sh cwhile.sh

以单引号 '' 包围时,不会解析内部的变量和命令等,里面是什么就直接原样赋值给变量。

以双引号 "" 包围时,会先解析内部的变量和命令等,然后再将解析后的内容赋值给变量。

4. `` 和 $()

Shell 支持将命令的执行结果赋值给变量,常见的有以下两种方式:
variable=`command`
variable=$(command)

第一种方式把命令用反引号 ``(位于 Esc 键的下方)包围起来,反引号和单引号非常相似,容易产生混淆,所以不推荐使用这种方式;

第二种方式把命令用 $() 包围起来,区分更加明显,所以推荐使用这种方式。 而且, $() 支持嵌套使用,反引号 `` 则不支持。但是,$() 仅在 Bash Shell 中有效,而反引号可在多种 Shell 中使用。 需要注意的是:如果命令的输出内容有多行或者有多个连续的空白符时,那么在输出变量时应该将变量用双引号包围;否则,会导致与预期效果不一致。 示例:
#!/bin/bash

value=$(ls -l)
echo ${value}
echo --------------------------
echo "${value}"

其结果为:

total 12 -rw-r--r--. 1 root root 1087 Mar 4 18:18 cfind.sh -rw-r--r--. 1 root root 90 Apr 15 15:18 cstring.sh -rw-r--r--. 1 root root 228 Mar 5 10:56 cwhile.sh
--------------------------
total 12
-rw-r--r--. 1 root root 1087 Mar  4 18:18 cfind.sh
-rw-r--r--. 1 root root   90 Apr 15 15:18 cstring.sh
-rw-r--r--. 1 root root  228 Mar  5 10:56 cwhile.sh

所以,为了防止出现格式混乱的情况,建议在输出变量时加上双引号。

5. 只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。 例如:
#!/bin/bash

readonly val=hello
val=world

其结果为:

cstring.sh: line 4: val: readonly variable

 

 

标签:Shell,变量,val,--,echo,sh,root
From: https://www.cnblogs.com/chien/p/17328495.html

相关文章

  • 接口幂等性设计-拦截器+过滤器+redis
    接口幂等性设计-拦截器+过滤器+redis所需依赖:<!--redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>......
  • Arcgis 与 Claygl 可视化 glsl 特效篇(十八)
    我决定不从claygl基础来讲了直接整合arcgis与claygl可视化来讲关于整合clagyl有兴趣看我这篇文章arcgis与claygl引擎结合做地图可视化我整合一个类库后续不断更新中npmi@haibalai/gismap4-claygl 初始化gismap4-claygl类库,view是arcgis的sceneView对象import......
  • Arcgis 与 Claygl 可视化 glsl 特效篇(二十四)
    我决定不从claygl基础来讲了直接整合arcgis与claygl可视化来讲关于整合clagyl有兴趣看我这篇文章arcgis与claygl引擎结合做地图可视化我整合一个类库后续不断更新中npmi@haibalai/gismap4-claygl 初始化gismap4-claygl类库,view是arcgis的sceneView对象import......
  • Arcgis 与 Claygl 可视化 glsl 特效篇(二十三)
    我决定不从claygl基础来讲了直接整合arcgis与claygl可视化来讲关于整合clagyl有兴趣看我这篇文章arcgis与claygl引擎结合做地图可视化我整合一个类库后续不断更新中npmi@haibalai/gismap4-claygl 初始化gismap4-claygl类库,view是arcgis的sceneView对象import......
  • Arcgis 与 Claygl 可视化 glsl 特效篇(二十二)
    我决定不从claygl基础来讲了直接整合arcgis与claygl可视化来讲关于整合clagyl有兴趣看我这篇文章arcgis与claygl引擎结合做地图可视化我整合一个类库后续不断更新中npmi@haibalai/gismap4-claygl 初始化gismap4-claygl类库,view是arcgis的sceneView对象import......
  • graphhopper-ios 编译过程详解
    一、写在前面GraphHopper是一个快速且高效的路径规划引擎,它默认使用OpenStreetMap和GTFS数据,也可以导入其他数据源。它可以用作java库或独立的web服务器,去计算两个或多个点之间的线路的距离,时间,转弯指令和许多道路属性。除了“A-to-B”的路径规划能力之外,它还支持“snaptoro......
  • Arcgis 与 Claygl 可视化 glsl 特效篇(二十五)
    我决定不从claygl基础来讲了直接整合arcgis与claygl可视化来讲关于整合clagyl有兴趣看我这篇文章arcgis与claygl引擎结合做地图可视化我整合一个类库后续不断更新中npmi@haibalai/gismap4-claygl 初始化gismap4-claygl类库,view是arcgis的sceneView对象import......
  • git客户端安装
    git客户端下载地址:https://git-scm.com/downloads    end.  ......
  • Sentinel实战
    一、Sentinel简介Sentinel是阿里开源的面向服务流量治理的框架,官方原文是Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性......
  • java集合的stream操作
     //获取user里面所有id集合List<String>idList=list.stream().map(User::getId).collect(Collectors.toList());//list转换为id为key的mapMap<String,User>userMap=list.stream().collect(Collectors.toMap(User::getId,a->a,(k1,k2)->k1));//li......