高度なBashスクリプトプログラミングガイド(12):変数のタイプを指定する:declareまたはtypesetを使用する

4063 ワード

高度なBashスクリプトプログラミングガイド(12):変数のタイプを指定する:declareまたはtypesetを使用する
堅持することになり,立ち止まることに負ける
declareまたはtypeset組み込みコマンド(この2つのコマンドは完全に同じ)は、変数の具体的なタイプを指定することを許可する.あるプログラミング言語では、変数のタイプを指定する弱い形式である.declareコマンドはBash 2.0以降に導入されるコマンドである.typesetはkshのスクリプトにも使用できる.
declare/typesetオプション
-r読み取り専用
declare-r var 1(declare-r var 1はreadonly var 1と全く同じ)これはC言語のconstキーワードと同様に、変数を読み取り専用に指定するために使用されます.読み取り専用変数の値を変更しようとすると、エラーメッセージが発生します.
root@ubuntu:~/resource/shell-study/0508-2013# declare -r var1=11
root@ubuntu:~/resource/shell-study/0508-2013# echo $var1
11
root@ubuntu:~/resource/shell-study/0508-2013# let "var1=12"
bash: var1: readonly variable
root@ubuntu:~/resource/shell-study/0508-2013# ^C
root@ubuntu:~/resource/shell-study/0508-2013# readonly var2=12
root@ubuntu:~/resource/shell-study/0508-2013# echo $var2
12
root@ubuntu:~/resource/shell-study/0508-2013# let "var2=13"
bash: var2: readonly variable
root@ubuntu:~/resource/shell-study/0508-2013# 

-i整形
declare -i number   スクリプトは変数「number」を整数型で処理する.1つの変数を整数型に指定するとexprやletコマンドがなくても特定の算術演算を許可する.
#!/bin/bash

declare -i number
number=3
echo "number = $number"

number="123"
echo "number = $number" 

number="abc"
echo "number = $number" 

number=6/3
echo "number = $number" 

not_int_number=6/3
echo "not_int_number = $not_int_number" 
exit 0
結果を見てみましょう.
root@ubuntu:~/resource/shell-study/0508-2013# ./test1.sh 
number = 3
number = 123
number = 0
number = 2
not_int_number = 6/3
root@ubuntu:~/resource/shell-study/0508-2013#

-a配列
declare -a indices  変数indicesは配列と見なす.
root@ubuntu:~/resource/shell-study/0508-2013# declare -a str
root@ubuntu:~/resource/shell-study/0508-2013# str=(1 2 3 4 5)
root@ubuntu:~/resource/shell-study/0508-2013# echo $str
1
root@ubuntu:~/resource/shell-study/0508-2013# echo ${str[0]}
1
root@ubuntu:~/resource/shell-study/0508-2013# echo ${str[1]}
2
root@ubuntu:~/resource/shell-study/0508-2013# echo ${str[2]}
3
root@ubuntu:~/resource/shell-study/0508-2013# echo ${str[3]}
4
root@ubuntu:~/resource/shell-study/0508-2013# echo ${str[4]}
5
root@ubuntu:~/resource/shell-study/0508-2013# 

${配列名[下付き]}で下付き文字は0から下付き文字は:*または@で配列全体の内容を得て、直接配列名[下付き文字]を通じてそれに対して参照賦値を行うことができて、もし下付き文字が存在しないならば、自動的に新しい配列要素を追加して、直接:unset配列[下付き文字]を通じて相応の要素をクリアすることができて、下付き文字を持たないで、全体のデータをクリアする
root@ubuntu:~/resource/shell-study/0508-2013# str=(1 2 3 4 5)
root@ubuntu:~/resource/shell-study/0508-2013# echo $str
1
root@ubuntu:~/resource/shell-study/0508-2013# echo ${str[*]}
1 2 3 4 5
root@ubuntu:~/resource/shell-study/0508-2013# echo ${str[@]}
1 2 3 4 5
root@ubuntu:~/resource/shell-study/0508-2013# str[1]=10
root@ubuntu:~/resource/shell-study/0508-2013# echo ${str[@]}
1 10 3 4 5
root@ubuntu:~/resource/shell-study/0508-2013# unset str
root@ubuntu:~/resource/shell-study/0508-2013# echo ${str[@]}

root@ubuntu:~/resource/shell-study/0508-2013# 

-f関数
declare -f
スクリプトにdeclare-fを使用し、パラメータを追加しない場合、このスクリプトの前に定義されたすべての関数がリストされます.
declare -f function_name
スクリプトでdeclare-f function_を使用する場合nameという形式では、この関数の名前しかリストされません.
root@ubuntu:~/resource/shell-study/0508-2013# declare -f
command_not_found_handle () 
{ 
    if [ -x /usr/lib/command-not-found ]; then
        /usr/bin/python /usr/lib/command-not-found -- $1;
        return $?;
    else
        if [ -x /usr/share/command-not-found ]; then
            /usr/bin/python /usr/share/command-not-found -- $1;
            return $?;
        else
            return 127;
        fi;
    fi
}
root@ubuntu:~/resource/shell-study/0508-2013# declare -f hello

-x export
declare -x var3
この文は変数を宣言し、このスクリプトの環境変数としてエクスポートされます.
-x var=$value
declare -x var3=373
declareコマンドでは、変数タイプを宣言しながら変数に値を割り当てることができます.
先にここに着いて、O(∩∩)O~
私のコラムの住所:http://blog.csdn.net/column/details/shell-daily-study.html
続きます...