使用 "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-Builtinset 是具有三个不同目的的 shell 内置函数:

  1. 如果您不给它任何选项或参数,它会打印出所有现有的 shell 变量和函数。
  2. 它具有多种选项,可让您更改 shell 的各种属性。例如,set -C 告诉 shell 您不希望 > 覆盖现有文件(并且您希望命令失败,否则它们会这样做); set +C 告诉 shell 没关系,你现在希望 > 能够再次覆盖文件。
  3. 除选项之外的任何参数都会替换位置参数(</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 没有这些)。