What does `--` mean in the output of `declare -p`?

What does `--` mean in the output of `declare -p`?
$ declare -p ar
declare -a ar='()'


$ declare -p mmm
declare -- mmm="hello"

这里是什么--意思?它是否讲述了 的某些属性mmm

谢谢。

答案1

它只是为了输出格式的一致性;第一个字段是文字declare;第二个字段是属性列表;第三个字段是var=value.

因此,对于没有特定属性的变量,命令需要有一种显示“无属性”的方法;这是用完成的--

例如

bash-4.2$ declare y=100
bash-4.2$ declare -p y
declare -- y="100"
bash-4.2$ declare -l y
bash-4.2$ declare -p y
declare -l y="100"
bash-4.2$ declare +l y
bash-4.2$ declare -p y
declare -- y="100"

结果可以存储在文件中并在以后获取。

答案2

双破折号--声明给定命令的选项结束。你会发现一个非常聪明的描述库恩勒姆依照指示这个链接

给定的示例显示了如何 grep 查找值,-v如下所示:

grep -- -v inputFile

因此-v不会触发 --invert-match 选项,而是 grep 查找-vinputFile 内的字符串。

答案3

--标志着选项的结束。它在这里是多余的(因为变量名不会以以下开头(除了用户的区域设置在中-定义的病态情况之外)-α字符类)并且无论如何,当有标志时它不会添加)但无害。我想它在那里是因为代码有:

printf ("declare -%s ", i ? flags : "-");

哪个输入速度比以下命令更快:

if (i)
  printf ("declare -%s ", i ? flags : "-");
else
  printf ("declare ");

具有讽刺意味的是,在 中bash-2.01,该代码更改为:

if (pattr == 0 || posixly_correct == 0)
  printf ("declare -%s ", i ? flags : "-");
else if (i)
  printf ("%s -%s ", this_command_name, flags);
else
  printf ("%s ", this_command_name);

重新用于exportand readonly,而当时--避免使用export var=valuebut not declare -- var=value

相关内容