Bash 在';声明-p';输出'--';你的意思是什么?

Bash 在';声明-p';输出'--';你的意思是什么?,bash,declare,Bash,Declare,编辑:这不是重复的,至少对于引用的问题不是。这个问题是指使用“---”停止从命令行进一步处理选项。我的问题与declare内置函数的输出有关 我无意中用-l和-u在脚本中声明了一个变量,但没有出现错误 declare -lu myvar='TestString' echo "myvar: $myvar" 如果我添加了declare-p我得到一个带有双破折号的declare(--),它将给出myvar:TestString) 给 declare -- myvar="TestString" my

编辑:这不是重复的,至少对于引用的问题不是。这个问题是指使用“---”停止从命令行进一步处理选项。我的问题与declare内置函数的输出有关


我无意中用
-l
-u
在脚本中声明了一个变量,但没有出现错误

declare -lu myvar='TestString'
echo "myvar: $myvar"
如果我添加了
declare-p
我得到一个带有双破折号的declare(
--
),它将给出
myvar:TestString

declare -- myvar="TestString"
myvar: TestString
出于好奇,我从命令行运行了
declare-p | grep'declare--'
,得到了许多匹配的变量。有些来自我的设置,但有些来自bash本身

declare -- BASH="/bin/bash"
declare -- BASH_ARGV0
declare -- BASH_COMMAND
declare -- BASH_SUBSHELL
declare -- BASH_VERSION="5.0.7(1)-release"
declare -- COLUMNS="211"
declare -- COMPLETION_UTIL=" pmbin pmcat pmchkver pmcore pmcost pmdoc pmedit pminfo pmless pmlines pmlist pmman pmpath pmstripper pmuninst pmversion pmxs podpath"
declare -- COMP_WORDBREAKS
declare -- CU="podpath"
declare -- DZIL=""
declare -- EPOCHREALTIME
declare -- EPOCHSECONDS
declare -- HISTCONTROL="erasedups:ignoreboth"
declare -- HISTFILE="/home/harleypig/.bash_history"
declare -- HISTFILESIZE="100000"
declare -- HISTIGNORE="&:[ ]*:exit:ls:bg:fg:history:clear"
declare -- HISTSIZE="500000"
declare -- HISTTIMEFORMAT="%F %T "
declare -- HOSTNAME="sweetums"
declare -- HOSTTYPE="x86_64"
declare -- IFS=" 
declare -- LINES="55"
declare -- MACHTYPE="x86_64-pc-linux-gnu"
declare -- OPTERR="1"
declare -- OSTYPE="linux-gnu"
declare -- POD=""
declare -- PROMPT_COMMAND="_update_prompt"
declare -- PS1="\\[\\001\\002\\001\\002\\]\\n\\[\\001\\002\\001\\002\\]REBOOT - Current: 5.0.13-arch1-1-ARCH Latest: 5.1.2-arch1-1-ARCH\\nPacman Last Updated: 23h 20m\\n\\001\\002\\001\\002\\u\\[\\001\\002\\001\\002\\]@\\001\\002\\001\\002\\h\\[\\001\\002\\001\\002\\]: /home/harleypig\\[\\001\\002\\001\\002\\]\\n\\[\\001\\002\\001\\002\\001\\002:)\\001\\002\\001\\002\\] \$ "
declare -- PS2="> "
declare -- PS4="+ "
declare -- SECONDS
declare -- _="vim"
declare -- _backup_glob="@(#*#|*@(~|.@(bak|orig|rej|swp|dpkg*|rpm@(orig|new|save))))"
declare -- circled_digits="⓪①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳"
declare -- color_off="\\[\\001\\002\\001\\002\\]"
declare -- exit_status="\\[\\001\\002\\001\\002\\001\\002:)\\001\\002\\001\\002\\]"
declare -- filename="/tmp/bash-template-D8fdfMZ"
declare -- hostname="\\001\\002\\001\\002\\h\\[\\001\\002\\001\\002\\]"
declare -- lesspipe=""
declare -- nvm_init="/usr/share/nvm/init-nvm.sh"
declare -- pacman_status="Pacman Last Updated: 23h 20m"
declare -- prompt_color="\\[\\001\\002\\001\\002\\]"
declare -- system_reboot="REBOOT - Current: 5.0.13-arch1-1-ARCH Latest: 5.1.2-arch1-1-ARCH"
declare -- user="\\001\\002\\001\\002\\u\\[\\001\\002\\001\\002\\]"
declare -- vim_bundles=".vim/bundle"
那么,声明输出中的“---”是什么意思

我已经阅读了很多次bash手册,但我不知道这个解释可能在哪里。


您的问题是“我运行了
declare-p | grep'declare-->”
..,它将返回每个普通shell变量声明的开始行,因为它们在没有任何特殊声明的情况下,由
declare-p
本身格式化为
“declare-->”
,等等。

--
简单地说,没有标志或修饰符;您有一个简单、标准、非导出的默认字符串类型shell变量(未标记为整数、未标记为只读等)。这是因为状态没有任何变化。@CharlesDuffy:这有记录在案吗?我知道你显然是对的,尽管在文档中没有看到(或者我找不到)。谢谢准则#10在@thaotherguy中:太棒了,谢谢!好,那么“somevar=42”在功能上与“declare somevar=42”相同吗?这些变量,至少我知道的是我的,显示在命令行输出中,这意味着我没有像在一些启动文件中那样整洁。谢谢。我没有使用“---”,它是在运行
declare-p
时显示的。我想查尔斯·达菲和“另一个家伙”有答案。您引用的手册页部分没有说明当没有属性与变量关联时将显示“---”。@harleypig
-->
声明在其输出中使用的默认格式。我的回答解释说,无论调用
declare-p
还是
declare-p--
输出都是相同的。您的问题是“我运行了
declare-p | grep'declare-->”
..,它将返回每个声明的第一行,因为它们被
declare-p
本身格式化为
declare--
。(我确实误读了您的
'-'
所在的位置,但这与答案没有区别)是的,我理解
declare-p
declare-p--
给出了相同的输出。我使用grep只显示显示“declare--”的声明,这是我不理解的。bash文档没有通过文本或示例清楚地解释这个输出的含义。我现在了解到,
somevar=42
declare somevar=42
declare--somevar=42
在功能上是相同的,它们都将在
declare-p
上显示后者。既然我知道这意味着什么,你提到的文本对我来说才有意义。我认为手册中的文本需要一些澄清。
declare -- BASH="/bin/bash"
declare -- BASH_ARGV0
declare -- BASH_COMMAND
declare -- BASH_SUBSHELL
declare -- BASH_VERSION="5.0.7(1)-release"
declare -- COLUMNS="211"
declare -- COMPLETION_UTIL=" pmbin pmcat pmchkver pmcore pmcost pmdoc pmedit pminfo pmless pmlines pmlist pmman pmpath pmstripper pmuninst pmversion pmxs podpath"
declare -- COMP_WORDBREAKS
declare -- CU="podpath"
declare -- DZIL=""
declare -- EPOCHREALTIME
declare -- EPOCHSECONDS
declare -- HISTCONTROL="erasedups:ignoreboth"
declare -- HISTFILE="/home/harleypig/.bash_history"
declare -- HISTFILESIZE="100000"
declare -- HISTIGNORE="&:[ ]*:exit:ls:bg:fg:history:clear"
declare -- HISTSIZE="500000"
declare -- HISTTIMEFORMAT="%F %T "
declare -- HOSTNAME="sweetums"
declare -- HOSTTYPE="x86_64"
declare -- IFS=" 
declare -- LINES="55"
declare -- MACHTYPE="x86_64-pc-linux-gnu"
declare -- OPTERR="1"
declare -- OSTYPE="linux-gnu"
declare -- POD=""
declare -- PROMPT_COMMAND="_update_prompt"
declare -- PS1="\\[\\001\\002\\001\\002\\]\\n\\[\\001\\002\\001\\002\\]REBOOT - Current: 5.0.13-arch1-1-ARCH Latest: 5.1.2-arch1-1-ARCH\\nPacman Last Updated: 23h 20m\\n\\001\\002\\001\\002\\u\\[\\001\\002\\001\\002\\]@\\001\\002\\001\\002\\h\\[\\001\\002\\001\\002\\]: /home/harleypig\\[\\001\\002\\001\\002\\]\\n\\[\\001\\002\\001\\002\\001\\002:)\\001\\002\\001\\002\\] \$ "
declare -- PS2="> "
declare -- PS4="+ "
declare -- SECONDS
declare -- _="vim"
declare -- _backup_glob="@(#*#|*@(~|.@(bak|orig|rej|swp|dpkg*|rpm@(orig|new|save))))"
declare -- circled_digits="⓪①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳"
declare -- color_off="\\[\\001\\002\\001\\002\\]"
declare -- exit_status="\\[\\001\\002\\001\\002\\001\\002:)\\001\\002\\001\\002\\]"
declare -- filename="/tmp/bash-template-D8fdfMZ"
declare -- hostname="\\001\\002\\001\\002\\h\\[\\001\\002\\001\\002\\]"
declare -- lesspipe=""
declare -- nvm_init="/usr/share/nvm/init-nvm.sh"
declare -- pacman_status="Pacman Last Updated: 23h 20m"
declare -- prompt_color="\\[\\001\\002\\001\\002\\]"
declare -- system_reboot="REBOOT - Current: 5.0.13-arch1-1-ARCH Latest: 5.1.2-arch1-1-ARCH"
declare -- user="\\001\\002\\001\\002\\u\\[\\001\\002\\001\\002\\]"
declare -- vim_bundles=".vim/bundle"
declare [-aAfFgilnrtux] [-p] [name[=value] ...]
...
When -p is supplied without name arguments, it will display the 
attributes and values of all variables having the attributes specified 
by the additional options. If no other options are supplied with -p, 
declare will display the attributes and values of all shell variables. 
...