代码: script_name parameter1 parameter2 parameter3 ...
我們很容易就能猜出 $0 就是代表 shell script 名称(路径)本身,而 $1 就是其后的第一个参数, 依次类推....

須得留意的是 IFS 的作用,也就是, 若 IFS 被 quoting 處理後, 那麼 positional
parameter 也會改變。

如下例:
代码:
my.sh p1 "p2 p3" p4
fucntion 時, 我不是說過它是 script 中的 script

一例外的是 $0 而已。
舉例 而 言 : 假設 my.sh 裡有一個 fucntion 叫 my_fun , 若 在 script 中 跑
my_fun fp1 fp2 fp3 ,
那麼, function 內的 $0 是 my.sh , 而 $1 則是 fp1 而非 p1 了 ...
不如寫個簡單的 my.sh script 看看吧:
代码:
#!/bin/bash

my_fun() {

echo '$0 inside function is '$0

echo '$1 inside function is '$1

echo '$2 inside function is '$2

}

echo '$0 outside function is '$0

echo '$1 outside function is '$1
echo '$2 outside function is '$2

my_fun fp1 "fp2 fp3"

然後在 command line 中跑一下 script 就知道了:
代码:
chmod +x my.sh
./my.sh p1 "p2 p3"

$0 outside function is ./my.sh

$1 outside function is p1

$2 outside function is p2 p3

$0 inside function is ./my.sh

$1 inside function is fp1

$2 inside function is fp2 fp3

我們常在 shell script 裡用如下方法測試 script 是否有读进参数:
代码:
if [ $# = 0 ] //看到没有,所有的[]中的内容都必须和括号有空格
假如為 0 , 那就表示 script 沒有參數, 否則就是有帶參數...

在 shell中, 我們可用 $0, $1, $2, $3 ... 這樣的变量分別提取命令行中变量的更多相关文章

  1. 在Google被封的那些日子裏,我們這樣科學上網

    回到正題,如果某天你喜歡的網站被封了,你工作的郵箱無法訪問了,該如何用正確姿勢實現科學上網呢?雷鋒網為大家整理了數個小技巧. 1.FreeGate類傻瓜工具 很多人第一次用翻墻,應該是從FreeGat ...

  2. set,env和export命令显示shell变量其区别,与环境变量扫盲(一)

    种类: ♦ set     :  用来显示本地变量,显示当前shell的变量,包括当前用户的变量 ♦ env    :  用来显示环境变量,显示当前用户的变量. ♦ export:  用来显示和设置环 ...

  3. linux中环境变量和系统加载环境变量的顺序

    一.系统环境变量: /etc/profile :这个文件预设了几个重要的变量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, uma ...

  4. eclipse java项目中明明引入了jar包 为什么项目启动的时候不能找到jar包 项目中已经 引入了 com.branchitech.app 包 ,但时tomcat启动的时候还是报错? java.lang.ClassNotFoundException: com.branchitech.app.startup.AppStartupContextListener java.lang.ClassN

    eclipse java项目中明明引入了jar包 为什么项目启动的时候不能找到jar包 项目中已经 引入了 com.branchitech.app 包 ,但时tomcat启动的时候还是报错?java. ...

  5. 字符串怎么换行 || 字符串中使用单引号时应该怎么写 || 保留两位小数 || 数字0在if中的意思是false || 什么情况下会会报undefined || null和undefined的区别 ||

    换行的字符串 "This string\nhas two lines" 字符串中使用单引号时应该怎么写 'You\'re right, it can\'t be a quote' ...

  6. shell脚本变量定义注意别跟系统变量重名了……

    写了个很简单的脚本,执行结果却很奇怪.   1 #!/bin/bash PATH=$HOME/vlc_transplant4 rm -f $PATH/vlc ln -s $PATH/bin/vlc-s ...

  7. 在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static

    在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static ! 在C语言中,我们使用pthread_create ...

  8. SQL Server中如何获取当前年,月,日,时,分,秒

    分类: SQL Server  select GETDATE() as '当前日期',DateName(year,GetDate()) as '年',DateName(month,GetDate()) ...

  9. (转载)php的类中可以不定义成员变量,直接在构造方法中使用并赋值吗?

    (转载)http://s.yanghao.org/program/viewdetail.php?i=184313 php的类中可以不定义成员变量,直接在构造方法中使用并赋值吗? class block ...

随机推荐

  1. nginx和uwsgi的区别和作用

    Django+uwsgi+nginx nginx和uwsgi的区别和作用: 1, nginx是对外的服务器,外部浏览器通过url访问nginx, uwsgi是对内的服务器,主要用来处理动态请求. 2, ...

  2. Codeforces 1137B(kmp next数组构造)

    为了物尽其用,Next求出最多有哪部分能重复使用,然后重复使用就行了-- const int maxn = 5e5 + 5; char s[maxn], t[maxn]; int cnts0, cnt ...

  3. python之序列化json模块与pickle模块(待补充)

    一.json是所有语言都通用的一种序列化格式 只支持 : 列表,字典字符串,数字,且字典的key必须是字符串 ''' 1. dumps , loads 在内存中做数据转换: dumps : 数据类型 ...

  4. 086 Partition List 分隔链表

    给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前.你应当保留两个分区中每个节点的初始相对位置.例如,给定1->4->3->2-&g ...

  5. 使用nvmw解决windows下多版本node共存的问题

    不支持4.x的nodejs,用nodist吧 不支持4.x的nodejs,用nodist吧 不支持4.x的nodejs,用nodist吧 ===========不要再看的分割线============ ...

  6. CSS修改Autocomplete样式

    举个场景:在用户登录成功的时候,浏览器有时候会咨询你是否记住密码,当你记住密码下次登录的时候,标签会自动填充,但是这样会造成样式不统一,解决办法如下: input:-webkit-autofill, ...

  7. nginx 日志 log_format 及字段说明

    1.log_format 普通格式 log_format main '$remote_addr - $remote_user [$time_local] $request ' '"$stat ...

  8. springJDBC 事物隔离

    五.Spring-jdbc的实现 第一步:导jar包 pom.xml <!--引入spring-beans节点--><dependency>    <groupId> ...

  9. ubuntu键盘映射

    在sublime下开发习惯把CapsLock和Shift间交换,windows下有很多软件可以修改键盘映射,在ubuntu下可以是哦用xmodmap命令,使用方法如下: 在自己用户的home目录下新建 ...

  10. JS常用的技术

    思考与总结 1.模块化 曾看到某大牛说:模块化和组件化是前端开发的一大趋势.所谓的模块化一般是指为了实现一个特定的功能而将所有的代码(对象)封装成一个模块.而AMD就是requireJS为指定模块规范 ...