linux下set和eval的使用小案例解答
本博文主要是講解學生提出的如下一行命令指令碼定義的真正內涵:
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不能 對 進行轉義 總結起來就是 中要用 到兩個 才能...