What are the special dollar sign shell variables?
在bash中,似乎有几个变量具有特殊的、一致的意义值。例如,
将返回回接myprogram的进程的PID。我知道其他人,比如我认为是当前TTY的$?。还有其他人吗?
- 他们中有几个人不仅仅是巴什。它们也用于其他与Bourne相关的shell中,实际上是由posix指定的。
- 关于:ifs=$''请参见:stackoverflow.com/questions/4128235/…
- @SGU不是参数;这是一种特殊的引用类型。$'
'是一个换行字符,它是用ascii 10替换有向图
的结果。
- $1,$2,$3……在定位参数。
- "$@"阵列状构造是{$1, $2, $3 ...}所有定位参数。
- "$*"是IFS的扩张$1 $2 $3 ...所有定位参数。
- $#定位参数的个数。
- $-流选项集的外壳。
- $$PID的流壳(不同)。
- 最新的$_参数(或ABS的命令路径。当前壳后立即开始启动)。
- $IFS是场分离器(输入)。
- 管道是指$?最近退出的地位。
- $!是PID的最新背景命令。
- 的名字是$0壳或外壳脚本。
我们可以在上面找到的特殊参数在Bash参考手册。有所有的环境变量集的外壳。
一个综合指数,请看参考手册的变量指标。
- 它们都记录在bash手册页中。唯一奇怪的是,$_只在MAILPATH变量中使用时提到。
- @对于其余的$_定义,chepner在特殊参数下查看man(1) bash。
- 我在bash脚本中使用!$而不是$_,因为后者有时会失败。
- 不错的单子Kojiro。我遇到了这个语法$1+"$@"这是什么意思?
- @AMC:有关!$和$_之间的差异,请参阅unix.stackexchange.com/questions/271659/…。
- 我可以有一个包含$的字符串,并将其作为一个未保留的符号来处理吗?
- @Eduardopignatelli当然,在字符串周围加上单引号。
- 如果$在一个变量中,而字符串是由多个变量聚合而成的呢?逃离符号是唯一的解决方案吗?
- 如果$在一个变量中,那么在扩展该变量时,它仍然是一个文本$。
- $_负载参数负载命令
- $#脚本参数传递到流数
- $*参数列表传递到$@/脚本/分隔的字符串列表
开关的顶我的头。谷歌的bash的特殊变量。
- "我做到了。他们把我送到这里。"——书店短剧(官方文档:gnu.org/software/bash/manual/bashref.html特殊参数‌&8203;)
- 我认为$@是字符串,$*是定界列表(无论如何,根据上面接受的答案)。
- @Rastagedi:"$@"扩展到一个列表,"$*"扩展到一个字符串。$@的特殊行为适用于双引号内的情况。
- 投反对票是因为这不是一个非常完整或有用的答案。说"google it"显示出缺乏努力,特别是考虑到绝大多数人都是从google search来的。我认为你至少可以增加官方文件的链接。tbh,我没有将其标记为删除的唯一原因是它至少是对问题的部分回答。我知道它很旧,但请考虑编辑它以提供更多细节。
帮助理解什么$#,$0和$1,…,$ndo,I:使用脚本
1 2 3 4 5
| #!/bin/bash
for ((i=0; i<=$#; i++)); do
echo"parameter $i --> ${!i}"
done |
返回a代表输出:运行它
1 2 3 4 5
| $ ./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 |
- 那是什么?我是说在你的for循环中?这就是为什么我在这里,我找不到答案,因为我不知道该怎么称呼它。
- @安东尼,这就是所谓的可变间接。你可以找到一个很好的解释他在bash中的用法:间接扩展,请解释?.
有一些照顾的例子可能包括0美元;一些领先的路径名称的工作人员的程序。这两个脚本保存为EC /线。mytry.sh和执行它。
1 2 3
| #!/bin/bash
echo"parameter 0 --> $0" ; exit 0 |
输出:
1
| parameter 0 --> ./mytry.sh |
这是在一个流(2016年)版Slackware 14.2 bash,通过
- $0是否包含路径取决于您首先运行脚本的方式。如果您执行"./mytry.sh",您将在$0中看到这一点。如果您输入"~/mytry.sh",您将看到完整的路径(因为shell将展开~)。如果你这样做了。mytry.sh"你会看到"bash"。