① 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中求數組元素之和
上面兩個帖子均以計算一個給定數組元素之和的例子 來展示多核處理器(多處理器)並行計算的方法