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"
}
它是什么以及它来自哪里?
我找不到有关set
没有参数的命令的信息。事实上,我的 Linux 发行版中根本 没有man
页面。set
答案1
set
是一个内置的 shell,它显示所有 shell 变量,不仅是环境变量,还有 shell 函数,这就是您在列表末尾看到的内容。
变量以允许在执行或获取行时设置它们的语法显示。
从bash
手册页:
如果未提供选项或参数,set 将显示所有 shell 变量和函数的名称和值,并根据当前语言环境进行排序,其格式可重复用作设置或重置当前设置变量的输入。
在不同的 shell 上,行为不一定相同;例如,ksh
set
不显示 shell 函数。
答案2
set
是一个 shell 内置的,用于设置和取消设置 shell 选项和位置参数。
如果不带参数,set
将打印按当前顺序排序的所有 shell 变量(包括环境变量和当前会话中的变量)语言环境。
您还可以阅读bash 文档。
有一些注意事项。
set "$var"
将var
赋值给$1
.如果以或$var
开头,则内容将被视为 shell 选项序列。如果包含任何无效选项,大多数 POSIX shell 将打印错误。在中,仿真不仅打印错误,而且设置有效选项。当停止在第一个无效选项上设置选项时,将分配所有选项。在:-
+
$var
$var
yash
zsh
sh
ksh
yash
zsh
yash
var=-fxd; set "$var"
f
并将x
出现在$-
, 同时:
var=fdx; set "$var"
仅存f
在于$-
.在这两种情况下,f
和x
都会出现$-
在和仿真zsh
中。sh
ksh
为了避免出现这种情况,您可以--
作为第一个参数传递来设置位置参数,即使它以-
or开头+
:
var=-fdx; set -- "$var"
将分配$var
给$1
,无论其内容如何。
set --
没有任何进一步的参数将重置所有位置参数。
如果第一个参数是-
,则行为未指定。所有已知的 POSIX shell 都将取消设置x
和v
选项(除了posh
),并将之后的任何内容分配-
给位置参数:
set -xv - -f
将分配-f
给$1
.set -
也没有取消设置位置参数。希利奥什也有这样的行为。传家宝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
希利什-
如果参数中存在if ,甚至什么也不做:
$ 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
答案3
因为set
有输出并且which set
不返回任何内容,所以您知道它是您正在使用的 shell 的一部分,可能是 bash。
这个内置函数非常复杂,值得单独专门一节。 set 允许您更改 shell 选项的值并设置位置参数,或显示 shell 变量的名称和值。
set 的调用规范为:
set [--abefhkmnptuvxBCEHPT] [-o option-name] [argument …]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [argument …]
因此,如果您想在命令行上的 man 中找到它,您可以使用以下命令进行搜索
/set.*abef
答案4
我找不到有关不带参数的 set 命令的信息。实际上,我的 Linux 发行版中根本没有 set 的手册页。
实际上,由于set
bash 本身是内置的,因此您可以访问 bash 的帮助手册而不是手册页。为此,您可以help
在本例中使用 或help set
。