variable=value
variable='value'
variable="value"
variable 是变量名,value 是赋给变量的值。如果 value 不包含任何空白符(例如空格、Tab 缩进等),那么可以不使用引号;如果 value 包含了空白符,那么就必须使用引号包围起来。使用单引号和使用双引号也是有区别的,稍后我们会详细说明。
Shell 变量的命名规范和大部分编程语言都一样:注意,赋值号
=
的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。
url=https://www.leftso.com/c/linux-shell
echo $url
name='技术博客'
echo $name
author="leftso"
echo $author
使用一个定义过的变量,只要在变量名前面加美元符号$
即可,如:
author="leftso"
echo $author
echo ${author}
变量名外面的花括号{ }
是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
skill="Java"
echo "I am good at ${skill}Script"
如果不给 skill 变量加花括号,写成echo "I am good at $skillScript"
,解释器就会把 $skillScript 当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。{ }
,这是个良好的编程习惯。
url="https://www.leftso.com"
echo ${url}
url="https://www.leftso.com/c/linux-shell"
echo ${url}
第二次对变量赋值时不能在变量名前加$
,只有在使用变量时才能加$
。
' '
包围,也可以由双引号" "
包围,它们到底有什么区别呢?不妨以下面的代码为例来说明:
#!/bin/bash
url="https://www.leftso.com/c/linux-shell"
website1='技术博客:${url}'
website2="技术博客:${url}"
echo $website1
echo $website2
运行结果:' '
包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景。" "
包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义。variable=`command`
variable=$(command)
第一种方式把命令用反引号` `
(位于 Esc 键的下方)包围起来,反引号和单引号非常相似,容易产生混淆,所以不推荐使用这种方式;第二种方式把命令用$()
包围起来,区分更加明显,所以推荐使用这种方式。[mozhiyan@localhost ~]$ cd demo
[mozhiyan@localhost demo]$ log=$(cat log.txt)
[mozhiyan@localhost demo]$ echo $log
正在编写Shell教程,教程地址:https://www.leftso.com/c/linux-shell
[mozhiyan@localhost demo]$ log=`cat log.txt`
[mozhiyan@localhost demo]$ echo $log
正在编写Shell教程,教程地址:https://www.leftso.com/c/linux-shell
#!/bin/bash
myUrl="https://www.leftso.com/c/linux-shell"
readonly myUrl
myUrl="https://www.leftso.com/c/linux-shell"
bash: myUrl: This variable is read only.
unset variable_name
变量被删除后不能再次使用;unset 命令不能删除只读变量。#!/bin/sh
myUrl="https://www.leftso.com/c/linux-shell"
unset myUrl
echo $myUrl
地址:https://www.leftso.com/article/890.html