1. 程式人生 > >shell程式設計向函式傳遞陣列

shell程式設計向函式傳遞陣列

有時候 ,可能需要向函式中傳遞 陣列,這個時候,就需要向 函式中傳遞陣列, 本文以排序為例,簡單的演示如何向函式 傳遞陣列。

大家都知道 向函式中傳遞引數 可以用$1 這個變數即可。 但是 如果 要傳遞陣列 可能不行哦。 直接看下面的例子

#!/bin/bash

function  mytestfun (){
	newarray=$1
	echo "the received array is ${newarray[*]}"
}

arr=(1 2 3 4 5)
mytestfun ${arr}

這裡 我向mytestfun  傳入一個數組 作為第一個引數。結果如下:


可以看到 此時 只是把陣列的 第一個元素 傳了進來,陣列並沒有傳進來。

正確的寫法 如下:

#!/bin/bash
# 如何向函式傳遞陣列 
#
# 對陣列 排序 
function  sort(){
	local newarr
	newarr=(` echo "[email protected]" `)
	len=${#newarr[@]}
	for((i=0; i<$len-1; i++)){
	  	for((j=0; j<$len-1-i; j++)){
	    if [[ ${newarr[j]} -gt ${newarr[j+1]} ]];
	    then
	      temp=${newarr[j]}
	      newarr[j]=${newarr[j+1]}
	      newarr[j+1]=$temp
	    fi
	 
	  }
	}
	echo  ${newarr[*]}
}


# 使用者輸入陣列
#read  -p "please input an array "  -a arr

arr=(1 3 5 45 6 78 2 7 23)
args=`echo ${arr[*]}`
arr=(`sort  ${args}`)

# 列印陣列
for item in  ${arr[*]};
do
	echo $item |tr '\n'  ' '
done

正確的做法, 是這樣, 先把陣列 轉成一個 類似字串的東西, args  ,之後把args 這個 ’陣列‘ 字串 扔給被呼叫函式sort() ,在sort  內部  通過`echo [email protected]`  轉成 shell陣列,這樣就可以 操作, 陣列了。此時 在函式內部完成排序,但此時 排序的是 newarr ,原來的順序 並沒有改變, 怎麼辦呢?

 "[email protected]"將命令列引數視為單獨的字串, 代表所有的引數位置,但是代表各位置引數組成的序列.


這時候需要把陣列 在通過函式 返回出去, 這裡我使用echo 返回字串。 arr=(`sort  ${args}`)  再把字串 轉成 陣列, 這樣就相當於把陣列 又傳遞出來了。

可以看出 shell 程式設計 它的處理方式,是把陣列當成 字串進行傳遞,之後在傳出字串。


總結: 本文主要講解了,陣列 如何在函式中傳遞,包括傳入和傳出。

                                分享快樂,留住感動。                                                                   2017年 10月 06日 星期五 20:06:27   ---biaoge

相關推薦

shell程式設計函式傳遞陣列

有時候 ,可能需要向函式中傳遞 陣列,這個時候,就需要向 函式中傳遞陣列, 本文以排序為例,簡單的演示如何向函式 傳遞陣列。 大家都知道 向函式中傳遞引數 可以用$1 這個變數即可。 但是 如果 要傳遞陣列 可能不行哦。 直接看下面的例子 #!/bin/bash fun

shell 函式傳遞陣列和從函式返回陣列的一個細節問題

function arraydblr { local origarray local newarray local elements local i origar

指標8(應用指標函式傳遞陣列

要在函式中使用實引數組元素或改變實引數組元素的值,有三種對應方法 1)實參用陣列名,形參用指標變數。 2)實參用指標變數,形參用陣列名 3)實參和形參都用指標變數 給出一道例題 應用函式與指標,對長度為10的一維陣列進行從小到大排序。 #include<stdio.h> vo

C++函式傳遞陣列

C++向函式傳遞陣列 陣列的儲存空間很大,如果能夠把它作為引數傳遞給函式,那麼就能發揮很大的作用了。比如本來一個選出最大數的max函式只能在兩個數或三個數裡面選出一個最大的數字,如果我們把陣列傳遞過去,它就能夠在一堆數字中選出最大的數了,這大大提高了程式的效率。當函式中的某個引數是陣列時,在

C++函式陣列引數—函式傳遞陣列

C++學習之函式的陣列呼叫----、 當函式中的某個引數是陣列時,在引數名後加上一對中括號,比如int a[],表示引數a是一個數組。下面我們就來看這樣一個在一堆正數裡面找一個最大數的程式:(( #include "iostream.h" int max(int a

shell 程式設計6 函式

linux shell 可以使用者定義函式,然後在shell指令碼中可以隨便呼叫。 shell中函式的定義格式如下: [ function ] funname [()] { action; [return int;] } 說明: 1、可以帶functio

ajaxspringMVC傳遞陣列

用js生成問題的選項,然後把選項和題目一起傳到後臺。 根據之前寫的ajax傳資料的例子改了一下,發現傳陣列的時候會有很多的問題。 一、貼程式碼 上面是錯誤的程式碼,是我一開始寫的樣子 qname是字串 options是一個字串陣列 二、修改過程 整個修改的過程非常漫

函式傳遞物件(C++學習筆記 24)

一、使用物件作為函式引數 在向函式傳遞物件時,是通過 “ 傳值呼叫 ” 傳遞給函式的,即單向傳遞,只由實參傳給形參,而不能由形參傳回來給實參。因此函式中對物件的任何修改均不影響呼叫該函式的物件(實參)本身。 例 1 :使用物件作為函式引數 #include<iostream

form表單控制元件後臺傳遞陣列

後臺: public class MSelectDetail { private Integer xxx; private String xxxx; private Str

ajax後臺傳遞陣列2.0

問題: 通過ajax向後臺傳遞陣列,後臺接受不到。 解決方法 ajax沒辦法傳陣列(其實可以,就是試了很多方法都不可行); 在前端將陣列轉為字串形式,然後包裝成json資料格式,傳遞到後臺; 後臺照常接收,通過split解析一下陣列。 栗子: 前端: var ids=[]; id

SHELL訓練營--day8__shell函式陣列

函式 shell 中,將實現特定功能的程式碼組合起來,即為函式體。函式格式如下: [ function ] funname [()] { action; [return int;] } 注意函式定義:1.function 和(),在函式定義時,至少要保留一個。2.函式

jquery.ajax()後臺傳遞陣列資料問題,java後臺無法接受

                                         jquery.ajax()向後臺傳遞陣列資料問題,java後臺無法接受                                                             

python flask 通過ajax後臺傳遞陣列引數

ajax 像後臺傳遞引數,一般是字典的形式傳遞,但是如果字典的value的值是一個數組的話,通過request.form  獲取得到的結果是 None。這是就需要把陣列物件轉化為json字串,後臺才可

C++Lua傳遞陣列

沒什麼解釋,直接貼程式碼 cnid.lua 這個不是重點 --verify cnid function verify_cnid(id) --校驗位 local verifymap = {1, 0,

利用out關鍵字函式傳遞List引數遇到的問題

引言 今天使用out關鍵字向函式傳遞List<T>引數遇到了一點問題,做個記錄。之前只是大概瞭解out關鍵字就是作為引用傳遞。 遇到的問題 今天先寫了如下程式碼: using System; using System.Collections.Generic;

JSPServlet傳遞陣列引數

今天需要做一個多選刪除功能,需要從JSP中獲取已勾選的多選框的值,傳遞到Servlet中進行刪除操作。 <input type="checkbox" name="checkProduct" value="${product.pid}"> <input ty

c/c++函式傳遞指標並修改其指向的問題

一個用來交換兩個數的值的函式,眾所周知的錯誤寫法為: #include <iostream> using namespace std; void swap(int a, int b) { int t = a; a = b; b = t;

C++引用&函式傳遞陣列例子

#include <iostream>using namespace std;/*排序*/void xll(int (&ac)[5]);//排序函式int main(){    int a[5] = {1,8,5,6,3};    xll(a);    r

ajax後臺傳遞陣列引數

ajax從後臺獲取資料是非常常用的一種方式,從後臺獲取資料會先往後臺傳遞一些引數,以前傳遞的都是一些簡單的字串,今天在做頁面資料的批量刪除時需要向後臺傳遞一組資料刪除資料的編號,但是當把陣列用data

linux之基礎shell指令碼程式設計3 函式陣列

本章主要寫shell有關函式陣列使用 七 函式 7.1 函式的介紹 函式function是由若干條shell命令組成的語句塊,實現程式碼重用和模組化程式設計。  它與shell程式形式上是相似的,不同的是它不是一個單獨的 程序,不能獨立執行,而是shel