導航:首頁 > 操作系統 > linux數組

linux數組

發布時間:2022-02-12 04:26:04

linux C指針和數組

[]的本質並不是數組,[]的本質是:解引用。a[i]表示:解a+i地址處的引用,即取指針a向後偏移i個單位地址處的值。a[i]就是*(a+i)的語法糖。

② Linux shell 數組array基礎和$a的區別

Linux Bash中,數組變數的賦值有兩種方法:
(1) name = (value1 ... valuen) // 此時下標從0開始;
(2) name[index] = value
下面以一個簡單的腳本來說明,腳本內容如下:
#!/bin/bash
#定義數組
A=(a b c def)
#把數組按字元串顯示輸出
echo ${A[@]}
#屏幕顯示:a b c def
#數組的長度表示${#A[*]}
len=${#A[*]}
echo ${#A[*]}
#屏幕顯示:4
#改變數組元素的值
A[3]='vivian'
echo ${A[*]}
#屏幕顯示:a b c vivian
#循環輸出數組元素
i=0
while [ $i -lt $len ]
do
echo ${A[$i]}
let i++
done
#屏幕輸出:
# a
# b
# c
# vivian

#循環輸出數組元素的另一種寫法,注意,在條件中,用#a[@]取其個數。
for ((i=0;i<${#A[@]};i=$i+1))
do
echo ${A[$i]}
done
#循環輸出數組元素的另一種寫法,注意,在條件中,引用變數一定要用雙引號 ,否則報錯。
for (( j=0; j<"$len"; j=j+1 )) //len表示數組長度值
do
echo ${A[$j]}
done
#循環輸出數組元素的另一種寫法,注意,${A[*]}不能寫成$A ,$A默認是第一個元素。 如果A="a b c ded",就可以寫$A,
for value in ${A[*]}
do
echo $value
done
ps:
若a=(1 2 3 4)表示所有元素,則其只能用${a[*]}或者${a[@]}來表示。在a=(1 2 3 4)中,$a只是表示第一個元素1。
若a="1 2 3 4"表示所有元素,則其可以用${a[*]}或者${a[@]}或者$a來表示。
假如a="1 2 3 4",則array=($a)就相當於a=(1 2 3 4),不信你可以試試echo ${array[@]}。
上面的例子還可以改寫成以下內容:
for value in $A
do
echo $value
done

③ linux腳本,在一個循環中賦值一個數組

數組的賦值操作有問題,改成下面這樣:
for ubootfile in $uboot_list
do
FILE=`find . -name $ubootfile -print -quit`
if [ -n "$FILE" ]; then
a=(${a[@]} $FILE)
else
b=(${b[@]} $FILE)
fi
done
echo "found files:"
echo ${a[@]}
echo "missing files:"
echo ${b[@]}

下面是數組操作的講解,請參考:
數組作為一種特殊的數據結構在任何一種編程語言中都有它的一席之地,當然bashshell也不例外。本文就shell數組來做一個小的總結。
在這里只討論一維數組的情況,關於多維數組(事實上,你得用一維數組的方法來模擬),不涉及。這里包括數組的復制,計算,刪除,替換。

數組的聲明:
1)array[key]=value # array[0]=one,array[1]=two
2)declare -a array # array被當作數組名
3)array=(value1 value2 value3 ... )
4)array=([1]=one [2]=two [3]=three ... )
5)array="one two three" # echo ${array[0|@|*]},把array變數當作數組來處理,但數組元素只有字元串本身
數組的訪問:
1)${array[key]} # ${array[1]}
數組的刪除
1)unsetarray[1] # 刪除數組中第一個元素
2)unset array # 刪除整個數組
計算數組的長度:
1)${#array}
2)${#array[0]}#同上。 ${#array[*]} 、${#array[@]}。注意同#{array:0}的區別
數組的提取
從尾部開始提取:
array=( [0]=one [1]=two [2]=three [3]=four )
${array[@]:1} # two three four,除掉第一個元素後所有元素,那麼${array[@]:0}表示所有元素
${array[@]:0:2} # one two
${array[@]:1:2} # two three

子串刪除
[root@localhostdev]# echo ${array[@]:0}
one two three four
[root@localhostdev]# echo ${array[@]#t*e} # 左邊開始最短的匹配:"t*e",這將匹配到"thre"
one two e four
[root@localhostdev]# echo ${array[@]##t*e} # 左邊開始最長的匹配,這將匹配到"three"
[root@localhostdev]# array=( [0]=one [1]=two [2]=three [3]=four )
[root@localhostdev]# echo ${array[@] %o} # 從字元串的結尾開始最短的匹配
one tw three four
[root@localhostdev]# echo ${array[@] %%o} # 從字元串的結尾開始最長的匹配
one tw three four
子串替換
[root@localhostdev]# array=( [0]=one [1]=two [2]=three [3]=four )
第一個匹配到的,會被刪除
[root@localhostdev]# echo ${array[@] /o/m}
mne twm three fmur

所有匹配到的,都會被刪除
[root@localhostdev]# echo ${array[@] //o/m}
mne twm three fmur
沒有指定替換子串,則刪除匹配到的子符
[root@localhostdev]# echo ${array[@] //o/}
ne tw three fur
替換字元串前端子串
[root@localhostdev]# echo ${array[@] /#o/k}
kne two three four
替換字元串後端子串
[root@localhostdev]# echo ${array[@] /%o/k}
one twk three four

④ linux shell 怎樣比較兩個數組的內容,並且把不同的部分輸出

unset 不能這么用,需要指定數組索引,也就是數組下標,而不是數組的值,你可以這樣干:
#check if there are any files added
folder_list=(1 2 3 4 5)
file_list=(1 2)
declare -a result_list
t=0
flag=0
echo folder_list=${folder_list[*]}
echo file_list=${file_list[*]}
for m in "${folder_list[@]}"
do
for l in "${file_list[@]}"
do
if [ "$m" == "$l" ]; then
flag=1
break
fi
done
if [ $flag -eq 0 ]; then
result_list[t]=$m
t=$((t+1))
else
flag=0
fi
done
echo result_list=${result_list[*]}

弄個結果數組保存結果,把在file_list里找不到的folder_list值存到結果數組中。

⑤ linux shell里怎麼用數組

split(s,a,fs) 以fs為指定分隔符將字元串s分割成一個數組a awk 'BEGIN{print split("aswd|sawa|eee",Ti,"|"),Ti[1]}'

⑥ linux c 數組大小

自從C99標准開始,C語言支持變長數組,數組大小可以是變數

⑦ linux里A=「1 2 3」,$A是個數組嗎!還是一個字元串!

樓主說的應該是shell中的,$A是字元串。
字元串轉數組

str="12 34 56"

arr=($str)

count=${#arr[@]}

for (( i=0;i<count;i=i+1))

do

echo "$i=arr[$i]"

done
http://doudouclever.blog.163.com/blog/static/17511231020127288621354/

⑧ LINUX中c語言怎麼把漢字存放到數組中

//代碼已測,我用的是一位數組,沒必要用二維數組
#include<stdio.h>
main()
{
charbuf[100]={0};
intlen;
FILE*f=NULL;
printf("readfromfile?y/n ");

if(getchar()=='y')
{
if((f=fopen("1.txt","rb"))==NULL)
{printf("openfilefailed.");return;}

len=fread(buf,1,sizeof(buf),f);

if(len){printf("%s ",buf);}

fclose(f);
}
else
{
printf("inputyourwords: ");
scanf("%s",buf);

if((f=fopen("1.txt","ab+"))==NULL)
{printf("openfilefailed.");return;}

//findwordlength
for(len=0;len<(sizeof(buf)-1);len++)
if(buf[len]==0&&buf[len+1]==0)
{break;}

len=fwrite(buf,1,len,f);
fclose(f);
}
}

⑨ 怎樣將linux中一系列文件的地址放入數組中

cp text mulu1 mulu2 mulu3 會被 cp 認為是把 text mulu1 mulu2 這三個東西復制到 mulu3 里 用 for 語句: for d in mulu1 mulu2 mulu3 ; do cp -v text $d; done

⑩ linux中求數組元素之和

上面兩個帖子均以計算一個給定數組元素之和的例子 來展示多核處理器(多處理器)並行計算的方法

閱讀全文

與linux數組相關的資料

熱點內容
e站初音未來圖片解壓碼 瀏覽:573
榮耀老熊編譯器開源 瀏覽:931
北京php程序員培訓 瀏覽:664
手動壓縮空氣調節閥 瀏覽:455
天正2014未知命令 瀏覽:747
linuxrarp命令 瀏覽:650
家用空調壓縮機有皮帶嗎 瀏覽:53
製作解壓小書本 瀏覽:91
python3x爬蟲 瀏覽:68
通達信資金抬轎k線源碼 瀏覽:820
linuxluci 瀏覽:729
python如何按條件分配填充 瀏覽:894
ar89c51單片機編程 瀏覽:579
在編譯原理中單詞由什麼組成 瀏覽:499
安卓攝像頭一直閃爍怎麼回事 瀏覽:878
word文檔加密設置有幾種方法 瀏覽:502
釘釘加密咋取消啊 瀏覽:772
linux判斷文件大小 瀏覽:798
伺服器中間ic叫什麼 瀏覽:882
文件解壓加密碼 瀏覽:995