$ 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
答案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);
重新用于export
and readonly
,而当时--
避免使用export var=value
but not declare -- var=value
。