• linux bash shell之declare


    declaretypeset内建命令(它们是完全相同的)可以用来限定变量的属性.这是在某些编程语言中使用的定义类型不严格的方式。命令declare是bash版本2之后才有的。命令typeset也可以在ksh脚本中运行。

    declare/typeset 选项

    -r 只读
       1 declare -r var1

    (declare -r var1readonly var1作用相同)

    这大致和C的const限定词相同.一个试图改变只读变量值的操作将会引起错误信息而失败.

    -i 整数
       1 declare -i number
       2 # 脚本余下的部分会把"number"当作整数看待.		
       3 
       4 number=3
       5 echo "Number = $number"     # Number = 3
       6 
       7 number=three
       8 echo "Number = $number"     # Number = 0
       9 # 脚本尝试把字符串"three"作为整数来求值(译者注:当然会失败,所以出现值为0).

    某些算术计算允许在被声明为整数的变量中完成,而不需要特别使用expr或let来完成。

       1 n=6/3
       2 echo "n = $n"       # n = 6/3
       3 
       4 declare -i n
       5 n=6/3
       6 echo "n = $n"       # n = 2
    -a 数组
       1 declare -a indices

    变量indices会被当作数组.

    -f 函数
       1 declare -f

    在脚本中没有带任何参数的declare -f 会列出所有在此脚本前面已定义的函数出来。

       1 declare -f function_name

    declare -f function_name则只会列出指定的函数.

    -x export
       1 declare -x var3

    这样将声明一个变量作为脚本的环境变量而被导出。

    -x var=$value
       1 declare -x var3=373

    declare命令允许在声明变量类型的时候同时给变量赋值。


    例子 9-21. 用declare来声明变量类型

       1 #!/bin/bash
       2 
       3 func1 ()
       4 {
       5 echo This is a function.
       6 }
       7 
       8 declare -f        # 列出上面的函数.
       9 
      10 echo
      11 
      12 declare -i var1   # var1是一个整数.
      13 var1=2367
      14 echo "var1 declared as $var1"
      15 var1=var1+1       # 整数声明后,不需要使用'let'.
      16 echo "var1 incremented by 1 is $var1."
      17 # 试图将已声明为整数的变量的值更改为浮点值.
      18 echo "Attempting to change var1 to floating point value, 2367.1."
      19 var1=2367.1       # 引起一个错误信息,此变量的值保持原样.
      20 echo "var1 is still $var1"
      21 
      22 echo
      23 
      24 declare -r var2=13.36         # 'declare'允许设置变量的属性,
      25                               #+ 同时也给变量赋值.
      26 echo "var2 declared as $var2" # 试图更改只读变量的值.
      27 var2=13.37                    # 引起错误,并且从脚本退出.
      28 
      29 echo "var2 is still $var2"    # 这行不会被执行.
      30 
      31 exit 0                        # 脚本不会从这儿退出.

    Caution

    使用内建的declare来限定变量的范围.

       1 foo ()
       2 {
       3 FOO="bar"
       4 }
       5 
       6 bar ()
       7 {
       8 foo
       9 echo $FOO
      10 }
      11 
      12 bar   # 打印 bar.

    然而 . . .

       1 foo (){
       2 declare FOO="bar"
       3 }
       4 
       5 bar ()
       6 {
       7 foo
       8 echo $FOO
       9 }
      10 
      11 bar  # 什么也不打印.
      12 
      13 
      14 # 多谢Michael Iatrou指出这一点.
  • 相关阅读:
    [No0000188][VCB-Studio 科普教程 2.5] 基于 PotPlayer 和 madVR 的播放器教程(已更新 XySubFilter)
    [No0000184]JAVA语言学校的危险性
    [No0000185]Java技术板块图
    [No0000187]可能是把Java内存区域讲的最清楚的一篇文章
    [No0000183]Parallel Programming with .NET-How PLINQ processes an IEnumerable<T> on multiple cores
    [No0000182]Parallel Programming with .NET-Partitioning in PLINQ
    [No0000179]改善C#程序的建议2:C#中dynamic的正确用法
    [No0000178]改善C#程序的建议1:非用ICloneable不可的理由
    [No0000181]改善C#程序的建议9:使用Task代替ThreadPool和Thread
    [No000017E]改善C#程序的建议7:正确停止线程
  • 原文地址:https://www.cnblogs.com/fhefh/p/2024857.html
Copyright © 2020-2023  润新知