首页 文章

什么是特殊的美元符号shell变量?

提问于
浏览
703

在Bash中,似乎有几个变量具有特殊的,一致意义的值 . 例如,

./myprogram &; echo $!

将返回 myprogram 背景的过程的PID . 我知道其他人,比如 $? ,我认为这是目前的TTY . 还有其他人吗?

4 回答

  • 1193
    • $1$2$3 ,...是positional parameters .

    • "$@" 是所有位置参数的数组式结构, {$1, $2, $3 ...} .

    • "$*" 是所有位置参数的IFS扩展, $1 $2 $3 ... .

    • $# 是位置参数的数量 .

    • $- 为shell设置的当前选项 .

    • $$ 当前shell的pid(不是子shell) .

    • $_ 最近的参数(或启动后立即启动当前shell的命令的abs路径) .

    • $IFS 是(输入)字段分隔符 .

    • $? 是最新的前台管道退出状态 .

    • $! 是最近的后台命令的PID .

    • $0 是shell或shell脚本的名称 .

    以上大部分内容可以在Bash参考手册的Special Parameters下找到 . 有所有environment variables set by the shell .

    有关综合指数,请参阅Reference Manual Variable Index .

  • 13
    • $_ 最后一个命令的最后一个参数

    • $# 传递给当前脚本的参数数量

    • $* / $@ 作为字符串/分隔列表传递给脚本的参数列表

    脱离我的头顶 . 谷歌为bash特殊变量 .

  • 44

    为了帮助理解 $#$0$1 ,..., $n 做了什么,我使用这个脚本:

    #!/bin/bash
    
    for ((i=0; i<=$#; i++)); do
      echo "parameter $i --> ${!i}"
    done
    

    运行它会返回一个代表性输出:

    $ ./myparams.sh "hello" "how are you" "i am fine"
    parameter 0 --> myparams.sh
    parameter 1 --> hello
    parameter 2 --> how are you
    parameter 3 --> i am fine
    
  • 4

    注意一些例子; $ 0可能包括一些前导路径以及程序名称 . 例如,将这两行脚本保存为./mytry.sh并执行它 .

    #!/bin/bash
    
    echo "parameter 0 --> $0" ; exit 0
    

    输出:

    parameter 0 --> ./mytry.sh
    

    这是当前(2016年)版本的Bash,通过Slackware 14.2

相关问题