av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Shell命令替換:將命令的輸出結(jié)果賦值給變量

Shell 命令替換是指將命令的輸出結(jié)果賦值給某個變量。比如,在某個目錄中輸入 ls 命令可查看當(dāng)前目錄中所有的文件,但如何將輸出內(nèi)容存入某個變量中呢?這就需要使用命令替換了,這也是 Shell 編程中使用非常頻繁的功能。

創(chuàng)新互聯(lián)建站主營吳興網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app開發(fā),吳興h5重慶小程序開發(fā)搭建,吳興網(wǎng)站營銷推廣歡迎吳興等地區(qū)企業(yè)咨詢

Shell 中有兩種方式可以完成命令替換,一種是反引號
` `,一種是
$(),使用方法如下:

variable=`commands`
variable=$(commands)

其中,variable 是變量名,commands 是要執(zhí)行的命令。commands 可以只有一個命令,也可以有多個命令,多個命令之間以分號
;分隔。

例如,date 命令用來獲得當(dāng)前的系統(tǒng)時間,使用命令替換可以將它的結(jié)果賦值給一個變量。

#!/bin/bash

begin_time=`date`    #開始時間,使用``替換
sleep 20s            #休眠20秒
finish_time=$(date)  #結(jié)束時間,使用$()替換

echo "Begin time: $begin_time"
echo "Finish time: $finish_time"

運行腳本,20 秒后可以看到輸出結(jié)果:

Begin time: 2019年 04月 19日 星期五 09:59:58 CST

Finish time: 2019年 04月 19日 星期五 10:00:18 CST

使用 data 命令的
%s格式控制符可以得到當(dāng)前的 UNIX 時間戳,這樣就可以直接計算腳本的運行時間了。UNIX 時間戳是指從 1970 年 1 月 1 日 00:00:00 到目前為止的秒數(shù),不了解的讀者請猛擊這里。

#!/bin/bash

begin_time=`date +%s`    #開始時間,使用``替換
sleep 20s                #休眠20秒
finish_time=$(date +%s)  #結(jié)束時間,使用$()替換
run_time=$((finish_time - begin_time))  #時間差

echo "begin time: $begin_time"
echo "finish time: $finish_time"
echo "run time: ${run_time}s"

運行腳本,20 秒后可以看到輸出結(jié)果:

begin time: 1555639864

finish time: 1555639884

run time: 20s

第 6 行代碼中的
(( ))是 Shell 數(shù)學(xué)計算命令。和 C++、C#、Java 等編程語言不同,在 Shell 中進行數(shù)據(jù)計算不那么方便,必須使用專門的數(shù)學(xué)計算命令,
(( ))就是其中之一。更多細(xì)節(jié)我們將會在《Shell數(shù)學(xué)計算》一節(jié)中詳細(xì)講解。

注意,如果被替換的命令的輸出內(nèi)容包括多行(也即有換行符),或者含有多個連續(xù)的空白符,那么在輸出變量時應(yīng)該將變量用雙引號包圍,否則系統(tǒng)會使用默認(rèn)的空白符來填充,這會導(dǎo)致?lián)Q行無效,以及連續(xù)的空白符被壓縮成一個。請看下面的代碼:

#!/bin/bash

LSL=`ls -l`
echo $LSL  #不使用雙引號包圍
echo "--------------------------"  #輸出分隔符
echo "$LSL"  #使用引號包圍

運行結(jié)果:

total 8 drwxr-xr-x. 2 root root 21 7月 1 2016 abc -rw-rw-r--. 1 mozhiyan mozhiyan 147 10月 31 10:29 demo.sh -rw-rw-r--. 1 mozhiyan mozhiyan 35 10月 31 10:20 demo.sh~
--------------------------
total 8
drwxr-xr-x. 2 root     root      21 7月   1 2016 abc
-rw-rw-r--. 1 mozhiyan mozhiyan 147 10月 31 10:29 demo.sh
-rw-rw-r--. 1 mozhiyan mozhiyan  35 10月 31 10:20 demo.sh~

所以,為了防止出現(xiàn)格式混亂的情況,我建議在輸出變量時加上雙引號。

再談反引號和 $()

原則上講,上面提到的兩種變量替換的形式是等價的,可以隨意使用;但是,反引號畢竟看起來像單引號,有時候會對查看代碼造成困擾,而使用 $() 就相對清晰,能有效避免這種混亂。而且有些情況必須使用 $():$() 支持嵌套,反引號不行。

下面的例子演示了使用計算 ls 命令列出的第一個文件的行數(shù),這里使用了兩層嵌套。

[c.biancheng.net]$ Fir_File_Lines=$(wc -l $(ls | sed -n '1p'))
[c.biancheng.net]$ echo "$Fir_File_Lines"
36 anaconda-ks.cfg

要注意的是,$() 僅在 Bash Shell 中有效,而反引號可在多種 Shell 中使用。所以這兩種命令替換的方式各有特點,究竟選用哪種方式全看個人需求。


名稱欄目:Shell命令替換:將命令的輸出結(jié)果賦值給變量
文章位置:http://uogjgqi.cn/article/dpcodpe.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流