set是一个内置的shell,用于设置和取消设置shell选项和位置参数。
不带参数的情况下,set将打印按当前语言环境排序的所有shell变量(环境变量和当前会话中的变量)。
您还可以阅读bash文档。
有一些警告。
set "$var"将分配var值$1。如果$var以-或开头+,则将$var内容视为外壳程序选项的序列。如果$var包含任何无效的选项,大多数POSIX外壳程序将显示错误。yash而zsh在sh,ksh仿真不仅印刷错误,但也设置有效的选项。当yash停止在第一个无效选项上设置选项时,zsh将分配所有这些选项。在yash:
var=-fxd; set "$var"
f并且x将呈现$-,而:
var=fdx; set "$var"
仅存f在于中$-。在这两种情况下,f并且x将介绍$-与zsh在sh和ksh仿真。
为了保护您免受这种情况的侵害,您可以将--第一个参数传递为设置位置参数,即使它以-或开头+:
var=-fdx; set -- "$var"
将分配$var给$1,无论其内容如何。
set -- 如果没有其他任何参数,则将取消设置所有位置参数。
如果第一个参数是-,则行为未指定。所有已知的POSIX Shell都将取消设置x和v选项(除外posh),并在-位置参数之后分配任何内容:
set -xv - -f
将分配-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
如果-出现参数,Schily甚至不采取任何行动:
$ 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