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

Linux 中的 subshell 是什么?

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

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

什么是 subshell

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

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

echo $var

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

圖片

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

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

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

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

圖片

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

圖片

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

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

嵌套 subshell

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

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

圖片

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

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

圖片

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

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

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

. script

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

圖片


責任編輯:龐桂玉 來源: 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 語言

2019-05-20 10:58:40

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

2021-12-03 18:29:31

GoAny 泛型

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ù)棧公眾號

主站蜘蛛池模板: 日韩福利 | 九九精品在线 | 国产精品久久一区二区三区 | 欧美成人精品一区 | 色网在线观看 | 不卡视频在线 | 国产视频一视频二 | 一区二区三区国产视频 | 国产国拍亚洲精品av | 精品国产综合 | 美女久久久久 | 户外露出一区二区三区 | 国产精品国产三级国产aⅴ中文 | 欧美一级欧美一级在线播放 | 国产精品明星裸体写真集 | 免费观看www | 伊人91在线 | 中文字幕日韩欧美 | 欧美三级电影在线播放 | 久久久av中文字幕 | 欧美精品久久久久久久久老牛影院 | 人人射人人 | 一区二区三区四区av | 午夜精品一区二区三区在线观看 | 亚洲 91| 99精品视频在线 | 国产激情99| 91精品国产综合久久久动漫日韩 | 中国一级特黄毛片大片 | 国产亚洲精品综合一区 | 国产精品一区久久久 | av在线视| 欧美色综合一区二区三区 | 精品久久久久久亚洲精品 | 91精品久久| 一区精品视频 | 九九看片 | 日本福利片 | 国产一区二区在线播放 | 亚洲夜射| 成人伊人 |