Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 什么是特殊的美元符号shell变量?_Bash_Environment Variables_Dollar Sign - Fatal编程技术网

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

Bash 什么是特殊的美元符号shell变量?,bash,environment-variables,dollar-sign,Bash,Environment Variables,Dollar Sign,在Bash中,似乎有几个变量包含特殊的、含义一致的值。比如说, ./myprogram &; echo $! 将返回以myprogram为背景的进程的PID。我知道其他人,比如$?,我认为这是当前的TTY。还有其他的吗? $\uu最后一个命令的最后一个参数 $#传递到当前脚本的参数数 $*/$@作为字符串/分隔符列表传递给脚本的参数列表 从我的头顶上。谷歌搜索bash特殊变量。 $1,$2,$3。。。是最重要的 “$@”是所有位置参数的类似数组的构造,{$1,$2,$3…} “$*”

在Bash中,似乎有几个变量包含特殊的、含义一致的值。比如说,

./myprogram &; echo $!
将返回以
myprogram
为背景的进程的PID。我知道其他人,比如
$?
,我认为这是当前的TTY。还有其他的吗?

  • $\uu
    最后一个命令的最后一个参数
  • $#
    传递到当前脚本的参数数
  • $*
    /
    $@
    作为字符串/分隔符列表传递给脚本的参数列表
从我的头顶上。谷歌搜索bash特殊变量。

  • $1
    $2
    $3
    。。。是最重要的
  • “$@”
    是所有位置参数的类似数组的构造,
    {$1,$2,$3…}
  • “$*”
    是所有位置参数的IFS扩展,
    $1$2$3…
  • $#
    是位置参数的数量
  • $-
    为shell设置的当前选项
  • 当前shell(非子shell)的pid
  • $最新参数(或启动后立即启动当前shell的命令的abs路径)
  • $IFS
    是(输入)字段分隔符
  • $?
    是最新的前台管道退出状态
  • $
    是最新后台命令的PID
  • $0
    是shell或shell脚本的名称
上面的大部分内容都可以在Bash参考手册中找到。这是所有的问题


有关综合索引,请参见。

为了帮助理解
$
$0
$1
,…,
$n
应该做什么,我使用以下脚本:

#!/bin/bash

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

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

#!/bin/bash

echo "parameter 0 --> $0" ; exit 0
输出:

parameter 0 --> ./mytry.sh

这是通过Slackware 14.2在当前(2016年)版本的Bash上发布的,其中有几个不仅仅是Bash。它们也用于其他与Bourne相关的Shell中,实际上由指定。关于:IFS=$'\n'请参见:@sgu,这不是参数;这是一种特殊的引用
$'\n'
是一个文字换行符,它是将有向图
\n
替换为ASCII 10后产生的。如果您来这里查找
${1}
${*}
等,大括号只是为了消除歧义,通常是多余的。单独而言,
${x}
完全等同于
$x
。对于
$IFS
,请参见
bash
手册页中的所有文档。唯一奇怪的是,
$\ucode>仅在
MAILPATH
变量中使用时提到。@chepner在
$\ucode>的其余定义的特殊参数下查看
$\ucode>。我使用
$而不是
$\uu
,因为后者有时会失败。@amc:有关
之间的差异,请参阅$
$
@Timo如果命令不在后台,你怎么能向shell索要pid?“是的,他们把我送到这里来的。”——书店小品(官方文件:)我认为
$@
是字符串,
$*
是分隔列表(无论如何,根据上述公认的答案)。@RastaJedi:
“$@”
展开为列表,
“$*”
展开为单个字符串。
$@
的特殊行为在双引号内时适用。否决,因为这不是一个非常完整或有用的答案。说“GoogleIt”表示缺乏努力,特别是考虑到绝大多数人都是通过谷歌搜索来到这里的。我认为你至少可以添加官方文档的链接。TBH,我没有将其标记为删除的唯一原因是因为它至少是对问题的部分回答。我知道它是旧的,但是请考虑编辑它来提供更多的细节。我是说在你的循环中?这就是我来这里的原因,我在任何地方都找不到答案,因为我不知道该怎么称呼它。@Anthony,这个叫。您可以在中找到有关其用法的详细解释。$0是否包含路径取决于您首先运行脚本的方式。如果您执行“/mytry.sh”,您将在$0中看到它。如果您输入“~/mytry.sh”,您将看到完整的路径(因为shell已展开)。如果你做了“.mytry.sh”你会看到“bash”。
parameter 0 --> ./mytry.sh