set
没有参数的命令有什么作用?
正如我所看到的,它像env
命令一样打印出我的环境变量,但按字母顺序排列。并进一步打印一些不同的信息(变量?函数?),例如:
__git_printf_supports_v=yes
__grub_script_check_program=grub-script-check
...
quote ()
{
local quoted=${1//\'/\'\\\'\'};
printf "'%s'" "$quoted"
}
quote_readline ()
{
local quoted;
_quote_readline_by_ref "$1" ret;
printf %s "$ret"
}
Run Code Online (Sandbox Code Playgroud)
它是什么,它来自哪里?
我找不到有关set
没有参数的命令的信息。实际上,我的 Linux 发行版中根本没有man
页面set
。
jll*_*gre 21
set
是一个内置的 shell,它显示所有 shell 变量,不仅是环境变量,还有 shell 函数,这就是您在列表末尾看到的。
变量显示的语法允许在执行或获取行时设置它们。
从bash
手册页:
如果未提供任何选项或参数,则 set 显示所有 shell 变量和函数的名称和值,根据当前语言环境排序,其格式可重复用作设置或重置当前设置的变量的输入。
在不同的 shell 上,行为不一定相同;例如,ksh
set
不显示外壳函数。
set
是一个 shell 内置函数,用于设置和取消设置 shell 选项和位置参数。
没有参数,set
将打印在当前locale 中排序的所有 shell 变量(环境变量和当前会话中的变量)。
您还可以阅读bash 文档。
有一些注意事项。
set "$var"
将赋值var
给$1
. 如果$var
以-
或开头+
,则$var
内容将被视为外壳选项序列。如果$var
包含任何无效选项,大多数 POSIX shell 将打印错误。yash
而zsh
在sh
,ksh
仿真不仅印刷错误,但也设置有效的选项。当yash
停止在第一个无效选项上设置选项时,zsh
将分配所有选项。在yash
:
var=-fxd; set "$var"
Run Code Online (Sandbox Code Playgroud)
f
并将x
出现在 中$-
,而:
var=fdx; set "$var"
Run Code Online (Sandbox Code Playgroud)
仅存f
在于$-
. 在这两种情况下,f
和x
将出现在$-
与zsh
中sh
和ksh
仿真。
为了保护您免受这种情况的影响,您可以--
作为第一个参数传递来设置位置参数,即使它以-
or开头+
:
var=-fdx; set -- "$var"
Run Code Online (Sandbox Code Playgroud)
将分配$var
给$1
,无论其内容如何。
set --
没有任何进一步的参数将取消设置所有位置参数。
如果第一个参数是-
,则行为未指定。所有已知的 POSIX shell 都将取消设置x
和v
选项(除了posh
),并将之后的任何内容分配-
给位置参数:
set -xv - -f
Run Code Online (Sandbox Code Playgroud)
将分配-f
给$1
. set -
也没有取消设置位置参数。Schily osh也有这种行为。传家宝 sh不会取消设置v
和x
选项。
唯一的 POSIX shell 异常是yash
,它被视为-
第一个位置参数:
$ yash -c 'set -xv - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
+ printf %s\n - -f
-
-f
+ printf %s\n cvx
cvx
Run Code Online (Sandbox Code Playgroud)
如果-
出现在参数中,Schily sh甚至什么都不做:
$ schily-sh -c 'set -v - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
<blank line>
s
$ schily-sh -c 'set -v -- -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
-f
vs
Run Code Online (Sandbox Code Playgroud)
因为set
有输出并which set
没有返回任何你知道它是你正在使用的 shell 的一部分,可能是 bash。
这个内置函数非常复杂,值得拥有它自己的部分。set 允许您更改 shell 选项的值和设置位置参数,或显示 shell 变量的名称和值。
set 具有以下调用规范:
set [--abefhkmnptuvxBCEHPT] [-o option-name] [argument …]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [argument …]
Run Code Online (Sandbox Code Playgroud)
所以如果你想在命令行上的 man 中找到它,你可以搜索
/set.*abef
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
135553 次 |
最近记录: |