1. 程式人生 > >bash:如何給function傳引數

bash:如何給function傳引數

給shell裡的函式(function)傳遞引數有2種方式:

第一種方式:
在function裡直接通過$1,$2,etc.來獲取引數:

例:
建立一個檔案“file.txt”在shell裡建立一個函式並呼叫:

file.txt:

funcTest.sh:

該shell的執行結果:

從上面的結果可以看出通過這種傳遞方式grep結果裡的換行已經被無視了,本來應該是3行*3個引數,直接被當做9個引數了。

另外,$0在這裡指的是shell指令碼名。

第二種方式:

使用awk:

例:

執行結果:

可以看到,awk可以分3次進行處理,相當於呼叫了3遍myfunc2.

此外還有一點,$0在這裡指的是本次呼叫的所有引數。

注意點:

第一種方式不支援管道傳參,使用“grep china file.txt|myfunc”將得不到你想要的結果。

相反第二種方式(awk方式)只支援管道傳參,而不支援“myfunc2 `grep china file.txt`”的呼叫方式。

--------------------------------------------------------------------------------------------------------------------

提示:

Built-in Shell Variables:

$# : Number of command-line arguments.

$- : Options currently in effect (supplied on command line or to set). The shell sets some options automatically.

$? : Exit value of last executed command.

$$ : Process number of the shell.

$! : Process number of last background command.

$0 : First word; that is, the command name. This will have the full
     pathname if it was found via a PATH search.

$n : Individual arguments on command line (positional parameters).
     The Bourne shell allows only nine parameters to be referenced
     directly (n = 1–9); Bash allows n to be greater than 9
     if specified as ${n}.

$*, [email protected] : All arguments on command line ($1 $2 …).

"$*" : All arguments on command line as one string ("$1 $2…"). The
     values are separated by the first character in $IFS.

"[email protected]" : All arguments on command line, individually quoted ("$1" "$2" …).

$_ : Temporary variable; initialized to pathname
     of script or program being executed.
     Later, stores the last argument of previous
     command. Also stores name of matching
     MAIL file during mail checks.

相關推薦

bash如何function引數

給shell裡的函式(function)傳遞引數有2種方式: 第一種方式: 在function裡直接通過$1,$2,etc.來獲取引數: 例: 建立一個檔案“file.txt”在shell裡建立一個函式並呼叫: file.txt: chen china engineer

Flask框架——檢視引數

如何實現資料互動(通過瀏覽器給介面傳入引數) 要想傳入引數,可以通過一個語法,這個語法就是<>(尖括號) from flask import Flask app = Flask(__name__) # 傳入引數:通過url地址給檢視函式傳遞引數 # 使用語法:&

POST方法@RequestBody引數失敗原因分析

通過ajax給springMVC傳遞引數時,通過post方法傳遞json字串時常用的方式,這時後端應該通過@RequestBody註解配合springMVC中配置的訊息轉換器來進行json字串的解析。 因為post方法中的json字串通常是一個前端的json物件轉化而成的字串,所以後端@Requ

微信小程式wx.request和wx.uploadFile中引數的區別

微信小程式中通過元件<form>提交表單的時候,在js中通過e.detail.value得到所提交表單的json格式資料。一般提交表單我們都是通過wx.request請求,提交表單資料,通過引數data傳資料, wx.request({ url: 'test.php', //僅為示例,

java調Python指令碼(三)引數問題

  java調Python的指令碼,我們需要將java這邊的引數傳到Python那邊使用,所以就需要傳參。 Python需要匯入系統包 import sys,然後使用 sys.argv[i] 接收java傳過來的引數就可以。 1、Python程式碼:

Angular6學習筆記17在路由中引數和接收引數

傳引數 1.在需要傳引數的元件的類檔案(ts檔案)中,構造方法中,宣告物件: constructor(private route: Router) { } 2.在路由中設定引數(有三種方式) routerLink屬性 a.對於單一引數 <a [router

013URL引數

  URL傳引數有兩種方式: 1、採用在URL中使用變數的方式:在path的第一個引數中,使用'<引數名>'的方式可以傳遞引數,然後在對於的檢視函式中也要寫一個引數,並且檢視函式中的引數名和URL中的引數名稱必須保持一致,否則沒法找到這個引數;另外,在URL中可以傳遞多個引數,下面是

ajax非同步引數後臺

通過使用ajax技術,將客戶端資料傳遞給服務端,服務端處理後返回資料給客戶端進一步處理,客戶端瀏覽器不必重新整理整個頁面,只需要重新整理部分內容。function ajaxFun(){  //js函式    $.ajax({url : '../servlet/priceSer

C# 委託的應用1將方法作為引數傳遞另一個方法

     長期以來,c和c++的程式設計師利用方法指標,將方法作為引數傳給另一個方法。c#使用委託來提供相同的功能,它將方法作為物件封裝起來,允許在執行時間接地繫結一個方法呼叫。      下面將通過氣泡排序的例子講解委託的產生     示例1 :該方法對一個整數陣列執行升

AirFlow 如何引數DAG

題外話(可以直接跳過進入正題):     最近需要使用airflow去排程任務,平常使用airflow都是排程的定時任務,這次不需要定時任務,只需要條件滿足時主動觸發airflow執行任務排程即可,同時將任務必要的外界引數傳給DAG。查了好多資料發現都沒有介紹如何將引數傳給

[makefile] 命令列make直譯器引數

例如: build: [tab] mvn clean package 原本是這樣既可以跑 UT又可以打不jar 包來,但後來UT總是不過。怎麼避免對檔案的修改呢? 本著這樣目的,修改如下: 1 maven.test.skip = false 2 build: 3

oracle 的SQL指令碼引數

SQL指令碼內容: conn &1/&2selectcount(*) from user_tables;     exit 呼叫: SQL> exit從Oracle9i Enterprise Edition Release 9.2.0.1.0 - P

java看看我是怎麼利用陣列Runnable執行緒引數的1

我的文章只給有耐心的人看,所以先寫程式碼 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Sem

C++函式引用和const引數

一  在函式傳參中使用引用 1.使用例子: #include<iostream> using namespace std; void reset(int &i){//引用傳參

C++11嚐鮮Variadic Function Templates(帶變長引數的函式模板)(續)

程式碼1 #include <iostream> #include <string> #include <boost/ref.hpp> #include <b

JythonJava如何Python

想在Java工程中呼叫Python指令碼,最關鍵的是python指令碼需要使用Java實時傳遞過來的變數。因此麻煩了,到處找教程。中文教程為零,還好有Stack Over Flow,輸入關鍵字:jython java passing  variable topython,果真

getopt/getoptsBash中命令列選項/引數處理

本文轉載自: http://www.cnblogs.com/FrankTan/archive/2010/03/01/1634516.html -- 0.引言    寫程式的時候經常要處理命令列引數,本文描述在Bash下的命令列處理方式。    選項與引數:    如下

python檔案引數

python檔案內部接收引數用:sys.argv sys.argv[0]:是python指令碼名 sys.arg[1]及以後各項:是接收的引數 看下面的例子: (para.py) #! /bin/

如何awk外部引數

在awk中,傳參的方式主要有如下兩種: 1.用-v傳參 [xxx@xxx expensive_user]$ A=3 [xxx@xxx expensive_user]$ B=4 [xxx@xxx

請求加斷言

enc .org ref assertion cnblogs sample display lin manual 參考:http://jmeter.apache.org/usermanual/component_reference.html#assertions 背景 在測