Yzh*_*ang -1 command-line bash scripts
为什么. file在 bash中使用即使它不是可执行文件也会执行文件?是因为它使用当前的 bash 会话来运行它,所以它的工作方式就像打字一样bash file?
此外,沿着类似的路线。我知道打字> file会删除文件的内容。但为什么?我知道这会将标准输入发送到文件。但是标准输入不是键盘吗?所以我不应该在理论上换一个新的路线并输入内容吗?我不明白。
首先. file不执行该文件,而是获取它。这听起来像是一个迂腐的观点,但有一个重要的区别。当你执行一个文件时,它在它自己的子shell中运行;例如,其中定义的任何变量都不会传播到父会话。为了说明这一点,请考虑这个脚本 ( foo.sh),它只是设置一个变量然后打印它:
foo="bar"
echo "In the script, foo is $foo"
Run Code Online (Sandbox Code Playgroud)
现在,让我们将变量设置foo为某个值,然后运行该脚本,完成后echo $foo:
$ foo="baz"
$ bash foo.sh
In the script, foo is bar
$ echo $foo
baz
Run Code Online (Sandbox Code Playgroud)
如您所见,$foo是在脚本中设置的,但这并没有改变父 shell 中变量的值。将上述情况与如果我们改为获取脚本时会发生什么情况进行对比:
$ . foo.sh
In the script, foo is bar
$ echo $foo
bar
Run Code Online (Sandbox Code Playgroud)
这一次,因为脚本是sourced,所以父shell中的变量也发生了变化。
该> file更简单。该>操作将打开一个文件(或创建它,如果它不存在)写入,并立即在文件中已经覆盖任何东西。因此,如果您> file什么都不做就运行,如果>文件存在,它将清空文件。
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |