成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux 中的 subshell 是什么?

系統(tǒng) Linux
我們都知道 shell 是一個可以讓你在 Linux 中運行命令的程序,你與 shell 的主要交互就是在終端中運行命令的時候。

除了 shell 之外,還有一個 subshell 的概念。

什么是 subshell

subshell 基本上就是一個新的 shell,只用于運行所需的程序。subshell 可以訪問 “父 shell” 設(shè)置的全局變量,但是不能訪問局部變量;subshell 對全局變量所作的任何更改都只限于當(dāng)前 subshell 會話內(nèi),不會傳遞到 “父 shell”中。

接下來我們根據(jù)幾個實際例子來詳細介紹一下。首先看下面腳本,一個顯示變量 var 的單行代碼:

echo $var

我將這個變量的值設(shè)置為 字符串"LHB",那么大家猜一下,運行結(jié)果會怎樣?

圖片

奇怪吧,腳本并沒有打印我設(shè)置的變量值。

Shell 腳本在子Shell中運行(默認情況下)

為什么會出現(xiàn)上面的情況呢?因為當(dāng)你在運行 shell 腳本時,它會在自己的 shell 中運行。由于此 shell 源自于另一個 shell(設(shè)置變量和運行腳本的地方),因此稱為子 shell(即 subshell)

shell 腳本無法讀取變量的值,因為它是一個局部變量,并且新創(chuàng)建的 shell 不知道這個值。如果你希望 subshell 可以訪問這個變量,那么需要使用 export 命令將其轉(zhuǎn)為全局變量。

圖片

你可以在當(dāng)前 shell 中新啟動一個 shell 來創(chuàng)建 subshell,只需運行 bash,即可進入一個 subshell。在 subshell 中運行 exit 命令即可退出 subshell 并回到原 shell 中。

圖片

但是新創(chuàng)建的 subshell 并不會打開一個新的窗口,它還是在當(dāng)前窗口中,不過已經(jīng)是一個新的 shell 了。

上面例子中我使用了一個變量來展示兩個 shell(父 shell 和子 shell)的區(qū)別。當(dāng)變量 var 沒有導(dǎo)出時(使用 export),子 shell 是不能讀取到的。

嵌套 subshell

你可以以相同的方式創(chuàng)建嵌套 subshell。變量導(dǎo)出后(export),它在隨后創(chuàng)建的所有 subshell 中都可用。

你可以在 subshell 中修改導(dǎo)出后的變量的值,更改后的值也會傳遞給后續(xù) subshell 中(因為變量本身是全局變量),但是當(dāng)你退出 subshell 而回到原先的 shell 后,變量還是最初的原始值。

圖片

為什么呢?因為到處變量的值被復(fù)制到 subshell,它是一個副本(從 LHB 變?yōu)?HOC),在父 shell 中還是保留著原始值。

所以,需要記住的是:無法在 subshell 中更改父 shell 中的變量。無論該變量是否導(dǎo)出,在 subshell 中對變量做的修改不會影響到父 shell。

圖片

在當(dāng)前 shell 中執(zhí)行 shell 腳本

默認情況下,一個 shell 腳本是在自己的 shell(即 subshell)中執(zhí)行的。但是你可以修改這個默認情況,即將 shell 腳本在當(dāng)前 shell 中執(zhí)行,通過 shell 內(nèi)置命令 . 來實現(xiàn)。

具體怎樣實現(xiàn)呢?不是這樣 ./script,而是如下這種方式:

. script

這樣,腳本中的命令就會在當(dāng)前 shell 中執(zhí)行,就像這些命令被直接鍵入終端中一樣,而不是在 subshell 中運行。腳本可以通過這種方式來訪問局部變量。

圖片


責(zé)任編輯:龐桂玉 來源: TIAP
相關(guān)推薦

2023-03-01 09:49:23

2022-04-03 13:17:21

Linux黑話解釋GRUB

2023-11-22 10:51:25

LinuxSuper

2022-11-16 08:43:56

Linux/etc/hosts文件

2023-05-18 22:51:08

2021-04-26 07:51:00

JavaScript方法函數(shù)

2022-09-15 09:54:34

nullPython字符

2010-06-29 13:58:17

SNMPMIB

2022-11-14 15:07:09

Linux管道

2023-05-05 08:18:38

Linuxsource命令

2023-03-28 07:03:15

gRPCMetadata

2025-05-28 08:05:00

stdclassPHP開發(fā)

2022-06-29 08:37:03

事件循環(huán)JS 語言

2021-12-03 18:29:31

GoAny 泛型

2019-05-20 10:58:40

物聯(lián)網(wǎng)IOT技術(shù)

2022-07-28 08:34:59

事件委托JS

2022-05-17 07:36:38

CSSBFC前端

2021-12-20 14:56:07

LinuxTTY

2010-06-21 15:49:59

Linux apt是什

2023-10-11 08:29:54

volatileJava原子性
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 九九九久久国产免费 | 婷婷开心激情综合五月天 | 狠狠入ady亚洲精品经典电影 | 欧美美女二区 | 91视频在线| jlzzjlzz国产精品久久 | 99久久久久| 久久激情视频 | 国产一区二区三区视频 | 新疆少妇videos高潮 | 日韩在线成人 | 免费国产一区二区 | 91中文字幕| 久久人| av一区二区三区四区 | 91欧美精品成人综合在线观看 | 亚洲在线免费观看 | 福利影院在线看 | 国产美女一区二区 | 午夜精品一区 | 国产精品99久久久久久动医院 | 国产一区不卡在线观看 | 日本精品视频 | 国产永久免费 | 黄色网址在线免费观看 | 久久国产精品免费一区二区三区 | 欧美日日| 国产精品亚洲成在人线 | 一区二区三区免费在线观看 | 日本高清视频在线播放 | 青青久草| 国产欧美一区二区精品久导航 | 欧美福利视频一区 | 欧美日一区二区 | 亚洲视频自拍 | 中文精品久久 | 亚洲视频 欧美视频 | 成人av在线播放 | 中文字幕高清在线 | 成人水多啪啪片 | 国产精品视频网站 |