Skip to content

Instantly share code, notes, and snippets.

@ibreathebsb
Created September 1, 2018 07:41
Show Gist options
  • Save ibreathebsb/f14dcb589c50054491b1cc1c6b4a85c9 to your computer and use it in GitHub Desktop.
Save ibreathebsb/f14dcb589c50054491b1cc1c6b4a85c9 to your computer and use it in GitHub Desktop.

变量

  1. 变量命名时不能用=号两边不能有空格
  2. shell脚本中的的单引号和双引号作用不同,单引号会将特殊符号当作普通符号处理,而双引号会将变量替换为其真是内容:
isaac@hp:~/Playground$ echo "lang is $LANG"
lang is en_US.UTF-8
isaac@hp:~/Playground$ echo 'lang is $LANG'
lang is $LANG
  1. 使用\来转义特殊字符
  2. 使用$(command)或者`command`来在命令中使用其他命令的结果:
isaac@hp:~/Playground$ echo "i'm $(whoami)"
i'm isaac

isaac@hp:~/Playground$ echo "i'm `whoami`"
i'm isaac
  1. 变量内容扩展: MYPATH="$PATH":/whatever/you/want 或者 MYPATH=${PATH}:/whatever/you/want
  2. 通过export var 使得变量可以在其他程序中访问
  3. 通过unset var 取消变量
isaac@hp:~/Playground$ echo $MYNAME 
isaac young2
isaac@hp:~/Playground$ unset MYNAME
isaac@hp:~/Playground$ echo $MYNAME 
  1. env 列出所有环境变量
  2. set 列出所有变量包括环境变量和用户自定义变量,其中有几个比较重要的变量
  • PS1 : 命令行提示符的格式
  • PS2 : 使用\\换行后的提示符通常为>
  • $ : 当前shell程序的pid echo $$
  • ? : 上次程序运行的返回值,例如按下[ctrl] + c后执行echo $$ 输出130表示程序强制终止

变量的读取和声明、数组

  1. read -p '提示信息' -t 时间 variable 将用户输入的值保存到variable中,-t表示限制时间在多少秒以内
please input your name:isaac       
isaac@hp:~/Notes/linux$ echo $yourname 
isaac
  1. declare 未指定参数时与set功能一致,列出所有变量,若指定参数则用来 变量的声明, declare -aixr variable:
  • -a: array, 将变量声明为数组类型
  • -i: integer, 将变量声明为整数类型
  • -x: export, 将变量声明为环境变量
  • -r: readonly, 将变量声明为只读
  • -p: print, 打印出变量的生命语句
  • +[xi]: 取消对应的类型声明:
isaac@hp:~/Notes/linux$ declare -i sum=9
isaac@hp:~/Notes/linux$ declare -p sum
declare -i sum="9"
isaac@hp:~/Notes/linux$ declare +i sum
isaac@hp:~/Notes/linux$ declare -p sum
declare -- sum="9"

@ibreathebsb
Copy link
Author

变量替换的特殊语法

# 若变量为空,则用后面的值替换整个表达是的值
isaac@hp:~$ echo ${var:-abcd}
abcd
isaac@hp:~$ echo $var

# 若变量为空,则用后面的值替换整个表达式并赋值
isaac@hp:~$ echo ${var:=abcd}
abcd
isaac@hp:~$ echo $var
abcd

# 变量不为空时,才将表达式的值替换为后面的指定值,不会影响原变量的值
isaac@hp:~$ var='exist'
isaac@hp:~$ echo ${var:+abcd}
abcd
isaac@hp:~$ echo $var
exist

#  变量为空时抛出错误信息
isaac@hp:~$ var=''
isaac@hp:~$ echo ${var:?shit\ happens}
bash: var: shit happens

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment