Ⅰ 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求數組長度為10000的浮點數(精確小數點右4位)計算值
既然題主沒有說要求用什麼語言,那我就用c++11實現了。
#include<iostream>
#include<random>
#include<thread>
#include<chrono>
#include<algorithm>
#include<iomanip>
usingnamespacestd;
constintsize=10000;
floattable[size];
intmain(){
random_deviceengine;
uniform_real_distribution<float>dist(0,1);
floatsum;
for(auto&i:table){
i=dist(engine);
}
autot_start=chrono::system_clock::now();
sum=accumulate(table,table+size,0.0);
autot_end=chrono::system_clock::now();
autoration=std::chrono::ration_cast<std::chrono::microseconds>(t_end-t_start).count();
cout<<"sumofthemainthread:"<<fixed<<setprecision(4)<<sum<<endl;
cout<<"timeelapsed:"<<ration<<"microseconds"<<endl;
floatsum_child[4];
autofun=[&](intindex){
sum_child[index]=accumulate(table+index*size/4,table+(index+1)*size/4,0.0);
};
t_start=chrono::system_clock::now();
threadthrd_table[4]={
thread(fun,0),thread(fun,1),thread(fun,2),thread(fun,3)
};
for(auto&thrd:thrd_table){
thrd.join();
}
sum=0;
sum=accumulate(sum_child,sum_child+4,0.0);
t_end=chrono::system_clock::now();
ration=std::chrono::ration_cast<std::chrono::microseconds>(t_end-t_start).count();
cout<<"sumofchildthreads:"<<fixed<<setprecision(4)<<sum<<endl;
cout<<"timeelapsed:"<<ration<<"microseconds"<<endl;
return0;
}
編譯:
g++-std=c++11test.cc-lpthread-otest
運行:
./test
結果:
sumofthemainthread:4976.8721
timeelapsed:0ms
sumofchildthreads:4976.8721
timeelapsed:0ms
由於隨機性每次加和的數值不同,但是精確到毫秒時,時間測出來妥妥的都是零。就是數據量太小,實際運行時間在微秒量級,當然看不出來。
精度改為微秒以後:
sumofthemainthread:4957.9878
timeelapsed:113microseconds
sumofchildthreads:4957.9878
timeelapsed:560microseconds
多線程反而比單線程慢,因為啟動線程本身也需要時間。
數據量再增大1000倍:
sumofthemainthread:4999892.0000
timeelapsed:25313microseconds
sumofchildthreads:4999892.0000
timeelapsed:8986microseconds
這回看著正常多了吧
Ⅲ C語言strlen求數組長度。為什麼會是這樣,linux下GCC編譯器。
你換台機器就不是58的值了!所謂的固定,是你機器內存情況剛好處在那種狀態下。
你沒有 ,strlen()就會自動去找 位置,這個0位置在什麼位置是不確定的。
strlen(s)函數,從s首地址開始一直統計到 位置,其中有幾個位元組就輸出長度為幾!
#include<stdio.h>
#include<string.h>
voidmain()
{
inti=0;//這里加上這個,你再去試,結果一定會有變化的,原理,自己思考一下吧
charp[]={1,2,3,4,5,66,7,};
charq[]={1,2,3,4};
charr[]={1,2,3,4};
printf("length:%d ",strlen(p));
printf("length2:%d ",strlen(q));
printf("length3:%d ",strlen(r));
}
Ⅳ linux中,c++ 結構體定義可變長數組成員時,為什麼可變數組的長度一定要放在臨近位置 具體看下面例子。
單從兩個結構上看都沒啥問題,之所以你說的出錯是因為,客戶端 和 服務端,的結構不一致導致的。 你的數據過去,服務端可能會先把數據扔到內存中,然後直接memcpy方式賦值給結構體對象。這就會導致a 和length是反的。
Ⅳ linux 命令 echo ${#array_var[*]} 中#的作用是什麼
返回數組的長度比如$array_var="abcd"${#array_var}就返回4。
linux命令是對Linux系統進行管理的命令。對於Linux系統來說,無論是中央處理器、內存、磁碟驅動器、鍵盤、滑鼠,還是用戶等都是文件,Linux系統管理的命令是它正常運行的核心,與之前的DOS命令類似。
如果你的英文足夠好,那完全可以不靠任何人就精通linux,只要你會用man。Man實際上就是查看指令用法的help,學習任何一種UNIX類的操作系統最重要的就是學會使用man這個輔助命令。
Ⅵ shell 怎麼獲取數組長度
arr=(12345)
len=${#arr[@]}
echo$len
關於shell數組的更多操作,參見我的空間文章《shell數組與awk數組》
http://hi..com/eamontse/item/cb93d2457a1d91e51281daef
Ⅶ linux下java實現ftp下載,ftpClient.listFiles();返回的數組長度一直是0
如果你加了ftpClient.enterRemotePassiveMode();還是不行,那麼就可能是你commons-net 的jia包版本太低,你可以試著引入 commons-net-3.3.jar以及以上版本的jar應該就可以了。
Ⅷ linux c 數組大小
自從C99標准開始,C語言支持變長數組,數組大小可以是變數
Ⅸ 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:難道這個結果就是查看到的數組長度
bash是linux的一種命令形式,就像cmd,後面的4是錯誤代碼,command not found是錯誤描述,意思是沒有找到命令,這個命令不存在,你寫的東西有問題,或者是環境變數設置有問題。