日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Shell命令替換:將命令的輸出結(jié)果賦值給變量
Shell 命令替換是指將命令的輸出結(jié)果賦值給某個(gè)變量。比如,在某個(gè)目錄中輸入 ls 命令可查看當(dāng)前目錄中所有的文件,但如何將輸出內(nèi)容存入某個(gè)變量中呢?這就需要使用命令替換了,這也是 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 可以只有一個(gè)命令,也可以有多個(gè)命令,多個(gè)命令之間以分號
;分隔。

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

#!/bin/bash

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

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

運(yùn)行腳本,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 時(shí)間戳,這樣就可以直接計(jì)算腳本的運(yùn)行時(shí)間了。UNIX 時(shí)間戳是指從 1970 年 1 月 1 日 00:00:00 到目前為止的秒數(shù),不了解的讀者請猛擊這里。

#!/bin/bash

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

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

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

begin time: 1555639864

finish time: 1555639884

run time: 20s

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

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

#!/bin/bash

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

運(yùn)行結(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)格式混亂的情況,我建議在輸出變量時(shí)加上雙引號。

再談反引號和 $()

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

下面的例子演示了使用計(jì)算 ls 命令列出的第一個(gè)文件的行數(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 中使用。所以這兩種命令替換的方式各有特點(diǎn),究竟選用哪種方式全看個(gè)人需求。


文章名稱:Shell命令替換:將命令的輸出結(jié)果賦值給變量
URL網(wǎng)址:http://www.5511xx.com/article/dpcodpe.html