shell陣列和declare用法
用途說明
declare命令是bash的一個內建命令,它可以用來宣告shell變數,設定變數的屬性(Declare variables and/or give them attributes)。該命令也可以寫作typeset。雖然人們很少使用這個命令,如果知道了它的一些用法,就會發現這個命令還是挺有用的。
常用引數
格式:declare
格式:typeset
格式:declare -p
格式:typeset -p
顯示所有變數的值。
格式:declare -p var
格式:typeset -p var
顯示指定變數var的值。
格式:declare var=value
格式:typeset var=value
格式:var=value
宣告變數並賦值。
格式:declare -i var
格式:typeset -i var
將變數var定義成整數。在之後就可以直接對錶達式求值,結果只能是整數。如果求值失敗或者不是整數,就設定為0。
格式:declare -r var
格式:typeset -r var
格式:readonly var
將變數var宣告為只讀變數。只讀變數不允許修改,也不允許刪除。
格式:declare -a var
格式:typeset -a var
將變數var宣告為陣列變數。但這沒有必要。所有變數都不必顯式定義就可以用作陣列。事實上,在某種意義上,似乎所有變數都是陣列,而且賦值給沒有下標的變數與賦值給"[0]"相同。
格式:declare -f
格式:typeset -f
顯示所有自定義函式,包括名稱和函式體。
格式:declare -F
格式:typeset -F
顯示所有自定義函式名稱。
格式:declare -f func
格式:typeset -f func
只顯示指定函式func的函式定義。
格式:declare -x var
格式:typeset -x var
格式:export var
將變數var設定成環境變數,這樣在隨後的指令碼和程式中可以使用。
格式:declare -x var=value
格式:typeset -x var=value
格式:export var=value
將變數var設定陳環境變數,並賦值為value。
使用示例
示例一 declare是內建命令
[[email protected] ~]#type -a declare
declare is a shell builtin
[[email protected] ~]#
[[email protected] ~]#type -a typeset
typeset is a shell builtin
[[email protected] ~]#
示例二 declare -i之後可以直接對錶達式求值
[[email protected] ~]#x=6/3
[[email protected] ~]#echo $x
6/3
[[email protected] ~]#declare -i x
[[email protected] ~]#echo $x
6/3
[[email protected] ~]#x=6/3
[[email protected] ~]#echo $x
2
如果變數被宣告成整數,可以把表示式直接賦值給它,bash會對它求值。
[[email protected] ~]#x=error
[[email protected] ~]#echo $x
0
如果變數被宣告成整數,把一個結果不是整數的表示式賦值給它時,就會變成0.
[[email protected] ~]#x=3.14
-bash: 3.14: syntax error: invalid arithmetic operator (error token is ".14")
如果變數被宣告成整數,把一個小數(浮點數)賦值給它時,也是不行的。因為bash並不內建對浮點數的支援。
[[email protected] ~]#
[[email protected] ~]#declare +i x
此命令的結果是取消變數x的整數型別屬性。
[[email protected] ~]#x=6/3
[[email protected] ~]#echo $x
6/3
因為變數x不是整型變數,所以不會自動對錶達式求值。可以採用下面兩個方式。
[[email protected] ~]#x=$[6/3]
[[email protected] ~]#echo $x
2
[[email protected] ~]#x=$((6/3))
[[email protected] ~]#echo $x
2
[[email protected] ~]#
示例三 宣告只讀變數
[[email protected] ~]#declare -r r
[[email protected] ~]#echo $r
[[email protected] ~]#r=xxx
-bash: r: readonly variable
[[email protected] ~]#declare -r r=xxx
-bash: declare: r: readonly variable
[[email protected] ~]#declare +r r
-bash: declare: r: readonly variable
[[email protected] ~]#
[[email protected] ~]#declare +r r
-bash: declare: r: readonly variable
[[email protected] ~]#
[[email protected] ~]#unset r
-bash: unset: r: cannot unset: readonly variable
[[email protected] ~]#
示例四 宣告陣列變數(實際上,任何變數都可以當做陣列來操作)
[[email protected] ~]#declare -a names
[[email protected] ~]#names=Jack
[[email protected] ~]#echo ${names[0]}
Jack
[[email protected] ~]#names[1]=Bone
[[email protected] ~]#echo ${names[1]}
Bone
[[email protected] ~]#echo ${names}
Jack
[[email protected] ~]#echo ${names[*]}
Jack Bone
[[email protected] ~]#echo ${#names}
4
直接引用names,相當於引用names[0]
[[email protected] ~]#echo ${#names[*]}
2
[[email protected] ~]#echo ${names[@]}
Jack Bone
[[email protected] ~]#echo ${#names[@]}
2
[[email protected] ~]#declare -p names
declare -a names='([0]="Jack" [1]="Bone")'
[[email protected] ~]#
示例五 顯示函式定義
[[email protected] ~]#declare -F
declare -f add_jar
declare -f add_jar2
declare -f add_jar3
[[email protected] ~]#declare -f
add_jar ()
{
[ -e $1 ] && CLASSPATH=$CLASSPATH:$1
}
add_jar2 ()
{
if [ -e $1 ]; then
CLASSPATH=$CLASSPATH:$1;
else
if [ -e $2 ]; then
CLASSPATH=$CLASSPATH:$2;
fi;
fi
}
add_jar3 ()
{
if [ -e $1 ]; then
CLASSPATH=$CLASSPATH:$1;
else
if [ -e $2 ]; then
CLASSPATH=$CLASSPATH:$2;
else
if [ -e $3 ]; then
CLASSPATH=$CLASSPATH:$3;
fi;
fi;
fi
}
[[email protected] ~]#declare -f add_jar
add_jar ()
{
[ -e $1 ] && CLASSPATH=$CLASSPATH:$1
}
[[email protected] ~]#declare -F add_jar
add_jar
[[email protected] ~]#declare -F add_
[[email protected] ~]#declare -F add_*
[[email protected] ~]#declare -F 'add_*'
[[email protected] ~]#
問題思考
相關資料
【1】Aric小屋 Linux bash shell之declare
http://www.cnblogs.com/fhefh/archive/2011/04/22/2024857.html
【2】譯言網 Bash中的declare語句
http://article.yeeyan.org/view/20180/38866
【3】Advanced Bash-Scripting Guide: 9.2. Typing variables: declare or typeset
http://tldp.org/LDP/abs/html/declareref.html
【4】Advanced Bash-Scripting Guide: Chapter 27. Arrays
http://tldp.org/LDP/abs/html/arrays.html#ARRAYREF
【5】php_boy的專欄 bash (4) declare getopts noclobber
http://blog.csdn.NET/php_boy/article/details/6416740
相關推薦
shell陣列和declare用法
用途說明 declare命令是bash的一個內建命令,它可以用來宣告shell變數,設定變數的屬性(Declare variables and/or give them attributes)。該命令也可以寫作typeset。雖然人們很少使用這個命令,如果知道了它的一些用
Shell陣列和函式
陣列中可以存放多個值。Bash Shell 只支援一維陣列(不支援多維陣列)。 Shell 陣列用括號來表示,元素用"空格"符號分割開,語法格式如下: array_name=(value1 ... valuen) 2.陣列常用操作 1)定義一個數組: myarray=(1 2 3 4 5);
shell陣列和變數的應用
專案中有一個需求:使用者選擇test1,test2,…test10之間的一個變數(env),我用這個變數作為docker的名稱去建立一個新的容器。其中埠號也是之前預訂好的,需要指定兩個,一個是ssh22埠的,一個是JAVA專案的,比如30001。 新起一個docker的命令如下: docke
03 . Shell陣列和函式
#### Shell陣列 ##### 簡介 > 陣列中可以存放多個值。Bash Shell 只支援一維陣列(不支援多維陣列),初始化時不需要定義陣列大小(與 PHP 類似)。 > > 與大部分程式語言類似,陣列元素的下標由0開始。 > > Shell 陣列用括號來表示,元素用"空格"符號分割開,語法格式如
shell之陣列和關聯陣列
陣列和關聯陣列 #!/bin/bash #定義陣列1 array_var1=(1 2 3 4 5 6)# #定義陣列2 array_var[0]="test1" array_var[1]="test2" array_var[2]="test3"
陣列和ArrayList的區別及ArrayList的常用API的用法
1.陣列 陣列在記憶體中是連續儲存的,優點是它的索引速度非常快,而且賦值與修改元素較快,不足是在陣列中插入資料比較麻煩,同時宣告陣列時應知名陣列的長度,若陣列長度過長會造成記憶體浪費,陣列長度過短,會造成資料溢位的錯誤。 1.1 例項: string[] s=new string
陣列和字串的方法與用法(陣列去重);
補充知識點:基類(object)的子類有哪些?Function,Array,Number,Boolean,String,Date,Math,RegExp String的兩種寫法:var st=new String("hello world") var st="hello
shell指令碼中 陣列的基本用法
在shell指令碼中,陣列 也是一種常用的資料結構,這篇文章簡單 說一下 陣列的基本用法. 1 陣列的宣告 這樣就可以 宣告 arr ,和 iplist 的陣列 #陣列的宣告 # 用 declare -a variable 語句來清楚地指定一個數組 # 宣告一個數組
c++ 11 陣列 和lambda表示式 語法 / 函式包裝器 基本用法
//倒敘遍歷陣列並輸出 // []裡面的變數可以當做返回值來理解 (int x) 這裡就是每次迭代器的值,也就是陣列的元素的值 void main() { array<int, 5>
javascript中li標籤的排序和陣列sort的用法 javascript中li標籤的排序和陣列sort的用法
轉: javascript中li標籤的排序和陣列sort的用法 1 2 3 4 5
陣列和鄰接表的BFS基礎用法
對於BFS的原理在此處就不在講述,我們直接將具體的例項。首先是結構為陣列的情況下BFS的使用:int N = 10000;//隨意大小int map[N][N] //圖的結構bool visit[N];//將其初始化為falsevoid BFS1 (int G[][],
一維陣列和二維陣列的定義及用法
一維陣列的定義型別說明符 陣列名 [常量表達式];在此說明:常量表達式必須是常量和常量符號。常量表達式定義了陣列的長度。在巨集定義中#define定義一個符號常量,則這個符號常量可以用來宣告陣列的個數#define n=9.....int arr[n];一維陣列的引用陣列必
shell中建立陣列和遍歷
linux 中定義一個數據的語法為: variable=(arg1 arg2 arg3 ....) 中間用空格分開。陣列的下標從0開始。 1 獲取下標為n的元素: variable[n] 而且不存在陣列下標溢位的情況,如果 n>= 陣列的長度,那麼為空,
shell裡 (())和set -u 用法
腳本里寫有: set -u ((ret=ret+$?)) ret沒定義,報錯 ret: unbound variable,導致指令碼直接返回狀態0.後面捕捉不到錯誤,如果命令列執行,就可以捕捉到錯誤。 具體原因: set -u Treat unset variables
Linux shell 中的陣列和關聯陣列
寫在前面的話 我用開始廢柴了,這個又是寫給我自己看的了。 普通陣列 1.陣列的定義 在Linux shell中定義一個普通的陣列很簡單,首先我們先給陣列命名(當然要符合所有的命名規則咯)。定義陣列的一般格式就是: array_name=(element1 eleme
numpy擴充陣列函式之repeat和tile用法
tile函式是模板numpy.lib.shape_base中的函式。 函式的形式是tile(A,reps) 函式引數說明中提到A和reps都是array_like的,什麼是array_like的parameter呢?在網上查了一下,始終搞不明白,便把熟悉的python資料型別都試了一下,得出以下結論。 A的
linux shell之陣列和關聯陣列
陣列:像C語言中的陣列是同一種意思 #!/bin/bash #陣列 num_value=(1 2 3 4 5) echo ${num_value[*]} echo ${num_value[@]}
Scala陣列,定長陣列和變長陣列,增強for迴圈,until用法,陣列轉換,陣列常用演算法,陣列其它操作
1. 陣列 1.1. 定長陣列和變長陣列 package cn.toto.scala //可變陣列的長度時需要引入這個包 import scala.collection.mutable.A
shell 中 if 和 else 用法詳解
基本語法 shell的if語法和C語言等高階語言非常相似,唯一需要注意的地方就是shell的if語句對空格方面的要求比較嚴格(其實shell對所有語法的空格使用都比較嚴格),如果在需要空格的地方沒有打上空格,都會報錯。如if [ $1x == "ip"x ];then ec
shell 向函式傳遞陣列和從函式返回陣列的一個細節問題
function arraydblr { local origarray local newarray local elements local i origar