【Shell】变量

本文详细介绍了Bashshell编程中变量的命名规则、赋值方法、不同类型变量的声明与处理,包括字符串、整数、浮点数以及数组(整数索引和关联数组)的使用和操作。还探讨了如何查看变量、计算长度和执行命令等内容。
摘要由CSDN通过智能技术生成

变量的命名

  1. 数字、字母、下划线。
  2. 不能以数字开头。
  3. 不能使用 shell 保留的名作为变量名。
  4. 变量赋值时,不能在等号两边添加空格。

变量赋值

  1. 定义或者重新赋值时,不加 $。
  2. 使用时加 $。
  3. 只读变量声明后,使用readonly标记。
  4. 关于变量:
    • 使用命令declare -p varName可以罗列出varName的所具有的属性。
    • 使用命令unset varName可以删除变量。
    • 只读变量不可以再次赋值。

怎样查看定义的变量

  1. 使用set | grep -o '^[a-zA-Z_][a-zA-Z0-9_]*='
    注意,该命令只能显示变量名。 参数o表示only-matching
  2. 使用declare -p查看。

变量类型

  1. 字符串
    1. 怎样声明
      默认声明的变量是字符串。可以使用 '、"、` 等包裹内容,表示字符串。区别如下:
      • 使用 ',内容中间的 $ 符号不起作用。
      • 使用 ",内容中的 $ 和 ` 符号起作用。
        echo "welcome to $school, its name is `ls -l`"
        
        上述代码中,变量和命令都会生效。
      • 使用 ` 包裹的内容,表示执行的命令。
    2. 计算长度的两种方式。
      # 通过 # 获取长度
      echo ${#varName}
      # 通过表达式计算获取长度
      echo `expr length "${#varName}"`
      
    3. 截取
      echo ${varName:2:3}
      
      从第三个位置开始,截取 3 个字符。
    4. 查找
      • 查找单个字符
        echo `expr index "$demoStr" io`
        
        demoStr中查找i或者o,那个先出现,则返回那个的位置。
        注意,第一个位置是 1 而不是 0。
      • 查找字符串的位置
        预留,暂未找到合适的方法
    5. 删除
      • 删除前缀
        echo ${originStr#$preStr}
        
  2. 整数
    declare -i varInteger=3
    
    如果赋予的值不是整数,那么它会尝试将其转换为整数,不能转换的默认转为 0.
  3. 浮点数
    可以使用 bc 工具进行计算,然后再赋值。也可以使用 awk 进行计算赋值。
    • 使用 bc 示例。
      result=$(echo "scale=2; 10.5 / 3" | bc)
      echo $result
      
    • 使用 awk 示例。
      result=$(awk 'BEGIN {printf "%.2f", 10.5 / 3}')
      echo $result
      
  4. 数组
    • 整数索引数组。
      1. 定义如下:
        int_arr=(3 1 5 9)
        echo ${int_arr[2]}
        
        注意,索引从 0 开始。
      2. 打印数组的所有元素。
        echo ${int_arr[@]}
        # 或者
        echo ${int_arr[*]} 
        
        注意,$int_arr会打印数组的第一个元素。
      3. 获取数组的长度。
        echo ${#int_arr[@]}
        # 或者
        echo ${#int_arr[*]}
        # 获取数组某个元素的长度,n 表示下标。
        echo ${#int_arr[n]} 
        
    • 关联数组,相当于字典。
      declare -A associative_array
      associative_array["name"]="唯我独尊"
      associative_array["age"]=30
      echo ${associative_array["age"]}
      
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值