shell 变量、参数、数组章节笔记

// 变量名和等号之间不能有空格  
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} // 输出第一个索引的值

  

原文地址:https://www.cnblogs.com/leyi/p/10613913.html