使用 "set" 和不使用 set 变量之间的区别?在 Cygwin 中。
Difference between using "set" and not using set for variables? In Cygwin.
我不明白两者的区别:
set youtube=’https://youtube.com’
和
youtube=’https://youtube.com’
对于第二个,我可以在命令中间使用它,例如:
cygstart $youtube
那行得通。
为什么以及如何不同?他们都设置了变量?
而且,当我不使用 "set" 这个词时,我必须使用 $?
谢谢。
这两个命令完全无关; set youtube='https://youtube.com'
与$youtube
无关。它所做的是,它将 </code> 设置为整个字符串 <code>'youtube=https://youtube.com'
.
根据 http://www.gnu.org/software/bash/manual/bashref.html#The-Set-Builtin,set
是具有三个不同目的的 shell 内置函数:
- 如果您不给它任何选项或参数,它会打印出所有现有的 shell 变量和函数。
- 它具有多种选项,可让您更改 shell 的各种属性。例如,
set -C
告诉 shell 您不希望 >
覆盖现有文件(并且您希望命令失败,否则它们会这样做); set +C
告诉 shell 没关系,你现在希望 >
能够再次覆盖文件。
- 除选项之外的任何参数都会替换位置参数(
</code> 和 <code>
等,以及 $@
和 $*
)。
因为 set youtube='https://youtube.com'
只用一个参数调用 set
,即 youtube=https://youtube.com
,它的效果是将第一个位置参数 (</code>) 设置为 <code>youtube=https://youtube.com
.
请注意 youtube='https://youtube.com'
是一种误导性的写法 youtube=https://youtube.com
;单引号在这里没有做任何事情(因为单引号的唯一目的是转义空格和特殊字符,而 https://youtube.com
没有这些)。
我不明白两者的区别:
set youtube=’https://youtube.com’
和
youtube=’https://youtube.com’
对于第二个,我可以在命令中间使用它,例如:
cygstart $youtube
那行得通。
为什么以及如何不同?他们都设置了变量?
而且,当我不使用 "set" 这个词时,我必须使用 $?
谢谢。
这两个命令完全无关; set youtube='https://youtube.com'
与$youtube
无关。它所做的是,它将 </code> 设置为整个字符串 <code>'youtube=https://youtube.com'
.
根据 http://www.gnu.org/software/bash/manual/bashref.html#The-Set-Builtin,set
是具有三个不同目的的 shell 内置函数:
- 如果您不给它任何选项或参数,它会打印出所有现有的 shell 变量和函数。
- 它具有多种选项,可让您更改 shell 的各种属性。例如,
set -C
告诉 shell 您不希望>
覆盖现有文件(并且您希望命令失败,否则它们会这样做);set +C
告诉 shell 没关系,你现在希望>
能够再次覆盖文件。 - 除选项之外的任何参数都会替换位置参数(
</code> 和 <code>
等,以及$@
和$*
)。
因为 set youtube='https://youtube.com'
只用一个参数调用 set
,即 youtube=https://youtube.com
,它的效果是将第一个位置参数 (</code>) 设置为 <code>youtube=https://youtube.com
.
请注意 youtube='https://youtube.com'
是一种误导性的写法 youtube=https://youtube.com
;单引号在这里没有做任何事情(因为单引号的唯一目的是转义空格和特殊字符,而 https://youtube.com
没有这些)。