linux下set和eval的使用小案例精彩解答

2021-09-03 05:52:38 字數 2861 閱讀 5700

linuxseteval的使用小案例解答

本博文主要是講解學生提出的如下一行命令指令碼定義的真正內涵:

runlevel=$(set -- $(runlevel); eval "echo \$$#" )

以下是老男孩培訓14期vip群內的對話解答記錄,內容已做過濾,有的網友以前反映過,說老男孩發的記錄時間對不上,其實老男孩只是以對話問答的形式讓大家掌握技術而已,內容是加工過的屬正常,不要大驚小怪,給大家看的一定是最容易理解的對話過程,也盡量保持了原來的對話。

解答對話:

北京-劉同學(123437415) 2013/4/10 23:01:07

求問一些服務的啟動指令碼runlevel=$(set -- $(runlevel); eval "echo \$$#" ) 這個runlevel是怎麼把這個執行級別的取到的

北京老男孩老師(49000448) 10:57:44

你敲一下runlevel看看。

北京-劉同學(123437415) 10:59:39

[root@g307 ~]# runlevel

n 3北京老男孩老師(49000448) 11:00:31

後面的3就是執行級別

北京-劉同學(123437415) 11:00:39

啊,明白了,他是 $#=2 然後 $2=3是這樣吧

老男孩老師點評:對。

北京-陶同學11:05:19

$# 獲取當前shell命令列中引數的總個數

$n 獲取當前執行的shell指令碼的第n個引數值,n=1,...9,當n為0時表示指令碼的檔名,如果n大於9,用大括號括起來$

北京-李燦(123458724) 11:08:22

eval對echo \$$#的雙重掃瞄

假如要的引數不是最後乙個 那麼這個總數 就不準確了是吧

老男孩老師點評:對的。取最後乙個才能這麼用。

北京老男孩老師(49000448) 11:09:19

set 和eval的用法比較特殊,後期課程慢慢的給大家***,現在是學習的剛剛開始啊。

[root@oldboy ~]# set -- "i am" handsome oldboy. #==>傳入三個引數

[root@oldboy ~]#

[root@oldboy ~]# echo $#

#==>現在有三個引數 3

[root@oldboy ~]# for i in $*;do echo $i;done #==>迴圈列印這些引數,用

$*,無引號 i

amhandsome

oldboy.

[root@oldboy ~]# for i in $@;do echo $i;done #==>在沒有雙引號的情況下,這裡的結果

$*和$@是一樣的 i

amhandsome

oldboy.

北京老男孩老師(49000448) 11:10:22

上面是咱們老男孩培訓後期課程教案裡的乙個例子

北京老男孩老師(49000448) 11:12:59

[root@oldboy ~]# set -- $(runlevel)

[root@oldboy ~]# echo $# 2

[root@oldboy ~]# echo $(set $(runlevel); eval "echo $2" ) 3

劉同學同學你理解這個吧。這個會了,那個就差不多了

北京-劉同學(123437415) 11:13:45

恩,懂了

北京老男孩老師(49000448) 11:13:55

set可以像命令列一樣設定傳參,這個用法不多見!

了解就得,工作幾乎不需要必須用它

北京-劉同學(123437415) 11:14:20

恩,好的

北京老男孩老師(49000448) 11:15:42

既然你懂了,我就在多說下,哈哈!

runlevel=$(set -- $(runlevel); eval "echo \$$#" )

1)這裡的$#就是引數個數為2,即runlevel的結果, 所以\$$#就是$2,即runlevel結果的第二列3

[root@g307 ~]# runlevel

n 32)eval就是把echo的字串,當做命令解析!解答了這麼多 其實知識含量已經非常多了。

可以寫一篇博文了。

北京-李燦(123458724) 11:16:52

echo $ #輸出括號內的值

(set $(runlevel); #將runlevel引數值,傳入shell,n 3

eval "echo $2" ) #eval二次掃瞄,首先掃瞄到echo輸出$2,第二次解析$2的值為等級3

這樣子嗎?

北京老男孩老師(49000448) 11:17:15

good,贊啊!李同學強悍啊,加油,未來是塊學習linux的材料,嘿嘿!

北京老男孩老師(49000448)  11:33:43

提醒下啊,問完問題 還有點事要做啊

這是老師給老男孩培訓的全體同學們解答問題的唯一預設條件。。

總結好,發到咱們群共享裡或者傳到svn共享裡。

再強調下啊:同學們和老男孩老師學習,最應該學習的就是這樣的學習方法和學習習慣,而不僅僅是技術本文,同學們切記。這次我也會發博文總結本次的對話,算是給你們做個榜樣吧,下次就是你們了。

linux下set和eval的使用小案例精彩解答

set 和eval的用法比較特殊,後期課程慢慢的給大家滲透,現在是學習的剛剛開始啊。root oldboy set i am handsome oldboy.傳入三個引數 root oldboy root oldboy echo 現在有三個引數 3 root oldboy for i in do e...

Linux下的eval以及和 ,

假設cmd echo 33 eval cmd 等價於 echo 33 其實相當是先讓後邊的變數先執行,再執行其結果 同時這些需要進行兩次掃瞄的變數有時候被稱為複雜變數。同時在shell指令碼中還有等價的兩條命令 都是做命令替換的,和上面變數替換差不多 都是用來重組命令列的,先完成引號裡的命令列,然後...

Linux 和 的區別以及調研 eval命令

一.首先 和 1.相同點 都具有命令帶環的作用 2.不同點 a.中的 s或者並不能對 進行在轉義,意思就 是 還具有 其本身的意義 但是 中 s能對 進行轉義 b.中的 s或者能對 進行 轉義,意思就是經過轉義 具有其 本身的意義 但是 中的 s不能 對 進行轉義 總結起來就是 中要用 到兩個 才能...