偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Linux 中的 subshell 是什么?

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

除了 shell 之外,還有一個(gè) subshell 的概念。

什么是 subshell

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

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

echo $var

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

圖片

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

Shell 腳本在子Shell中運(yùn)行(默認(rèn)情況下)

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

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

圖片

你可以在當(dāng)前 shell 中新啟動(dòng)一個(gè) shell 來(lái)創(chuàng)建 subshell,只需運(yùn)行 bash,即可進(jìn)入一個(gè) subshell。在 subshell 中運(yùn)行 exit 命令即可退出 subshell 并回到原 shell 中。

圖片

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

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

嵌套 subshell

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

你可以在 subshell 中修改導(dǎo)出后的變量的值,更改后的值也會(huì)傳遞給后續(xù) subshell 中(因?yàn)樽兞勘旧硎侨肿兞浚?,但是?dāng)你退出 subshell 而回到原先的 shell 后,變量還是最初的原始值。

圖片

為什么呢?因?yàn)榈教幾兞康闹当粡?fù)制到 subshell,它是一個(gè)副本(從 LHB 變?yōu)?HOC),在父 shell 中還是保留著原始值。

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

圖片

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

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

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

. script

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

圖片


責(zé)任編輯:龐桂玉 來(lái)源: 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命令

2025-05-28 08:05:00

stdclassPHP開(kāi)發(fā)

2023-03-28 07:03:15

gRPCMetadata

2019-05-20 10:58:40

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

2022-06-29 08:37:03

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

2021-12-03 18:29:31

GoAny 泛型

2022-05-17 07:36:38

CSSBFC前端

2022-07-28 08:34:59

事件委托JS

2010-06-21 15:49:59

Linux apt是什

2021-12-20 14:56:07

LinuxTTY

2021-06-11 10:33:14

MySQLPidSocket
點(diǎn)贊
收藏

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