在bash的man页中提到,
当涉及到在设置位置参数时它们的使用时,我没有找到任何大的差异在bash的man页中被提到。
set
有两个选项-
和--
我想知道在设置位置参数时使用-
和--
作为set
选项是否有任何区别。当涉及到在设置位置参数时它们的使用时,我没有找到任何大的差异在bash的man页中被提到。
set
有两个选项-
和--
我想知道在设置位置参数时使用-
和--
作为set
选项是否有任何区别。你可以使用--
(双减号)来表示shell选项的结束和参数的开始。例如:
set -- -a -b -f somefile
在执行命令后,$1
是 -a
,$2
是 -b
,$3
是 -f
,$4
是 somefile
。
如果没有使用 --
,shell 会将 -a
,-b
和 -f
解释为 shell 选项,并将 $1
设置为 somefile
。
Bash(4.1)手册中说(关于 set
命令):
--
如果此选项后没有跟随参数,则位置参数将被取消设置。否则,即使其中一些参数以 ‘-
’ 开头,位置参数也将被设置为这些参数。
-
表示选项结束,导致所有剩余的参数都被分配给位置参数。‘-x
’ 和 ‘-v
’ 选项被关闭。如果没有参数,则位置参数保持不变。
-
显然只是添加参数,并重置 -a
、-x
、-v
。 - ninjaljbash(1) man page 4.1.5(1) 中写道:
-- If no arguments follow this option, then the positional
parameters are unset. Otherwise, the positional parame‐
ters are set to the args, even if some of them begin
with a -.
- Signal the end of options, cause all remaining args to
be assigned to the positional parameters. The -x and -v
options are turned off. If there are no args, the posi‐
tional parameters remain unchanged.
-
或 --
后面没有参数时的情况。对于前者,现有的位置参数不会改变。对于后者,位置参数将被清除。set --
会清除位置参数,而 set -
是无操作的。
-v
和 -x
设置可以通过 set - ...
进行修改。因此,如果您已经打开了 set -v
(它使Shell打印输入行),则 set - ...
命令将关闭它。而 set -- ...
不会改变它。
set -x
比 set -v
更常见,因为 set -x
经常用于调试脚本以查看正在运行的确切命令。当调试Shell脚本时,通常会使用 bash -x <script>
命令来运行它。知道 set - ...
会关闭 -x
,您可能想要使用 set -- ...
,因为将 -x
关闭作为另一个命令副作用是非常意外的。set - ...
关闭 -x
和 -v
。这很可能会产生不良影响,因此我建议使用 set -- ...
。 - camhtouch -dashed
touch: illegal option -- h
usage: touch [-acfm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...
--
,就像这样:touch -- -dashed
ls
以查看-dashed
。set
Bash 内置命令。我会修改我的答案,并且修改你的答案使其更清晰明了。 - opyate-a 5
,而多于一个字母的参数的取值方式则使用等号 --after=5
。 - ahmet alp balkan-的参数等同于--
。GNU bash,版本4.0.35(1)-release
。它在手册的开头非常明确(第38行)。 - bmkset
不同,因为在调用bash
之前没有参数(显然),而-a
、-v
、-x
设置来自命令行。 - ninjalj