// 变量名和等号之间不能有空格 hello="123456"; echo $hello; // 花括号只是帮助识别变量边界 echo ${hello}; // unset 删除变量 unset hello; // 打印为空 echo $hello; // 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的 // 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用 hello='12345'; echo '$hello world'; 显示: $hello world // 双引号里可以有变量 // 双引号里可以出现转义字符 echo "$hello "world"" 显示: 12345 "world" // 获取字符串长度 echo ${#hello} // 提取子字符串 // 从第2个字符开始截取5个字符 echo ${hello:1:5} // 命令的结果赋值给变量 $() || ` ` info=$(tail -n 5 ./hello.txt). echo ${info} 或 info=`head -n 5 ./hello.txt` echo ${info} // 参数传递 $1 获取第一个参数 $# 获取传递的参数个数 $* 获取所有的参数 $@ 获取所有的参数,与$*相同 ./1.sh 1 2 3 echo $1 // 1 echo $# // 3 echo $* // 1 2 3 // $* 和 $@ 的区别 (加上双引号后才有区别) // "$*" 是一个参数,接收的参数当一个整体 “$@”如果是多个参数,会分开接收 // $@ 加不加引号没有影响,主要是$*加引号会结果不同 for i in $@; do echo $i; echo '-----split-line----' done; for i in "$*"; do echo $i; echo '-----split-line----' done; // $@把参数当成3个 循环了三次 1 -----split-line---- 2 -----split-line---- 3 -----split-line---- // “$*"把参数当成一个整体,循环了一次 // 如果不加引号就跟$@一样 1 2 3 -----split-line---- // 数组 hello=(1 2 3 4 5) // 数组空格分割 echo ${hello[1]} // 获取指定索引的值 hello[0]=9 // 设置数据 echo ${hello[*]} // 输出全部 echo ${#hello[*]} // 输出数组长度 echo ${hello} // 输出第一个索引的值