linux下set和eval的使用小案例精彩解答
生活随笔
收集整理的這篇文章主要介紹了
linux下set和eval的使用小案例精彩解答
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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是這樣吧 老男孩老師點評:對。
北京-陶同學<DD@sina.com>?11:05:19 $# 獲取當前shell命令行中參數的總個數 $n?獲取當前執行的shell腳本的第n個參數值,n=1,...9,當n為0時表示腳本的文件名,如果n大于9,用大括號括起來${10} 老男孩老師點評:這個同學說的是命令行腳本傳參的內容,也適合本文。
北京-李燦(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 am handsome oldboy. [root@oldboy ~]# for i in $@;do echo $i;done #==>在沒有雙引號的情況下,這里的結果$*和$@是一樣的 I am handsome 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 3 2)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的使用小案例精彩解答的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安全工具ssl
- 下一篇: 网络游戏程序中解决加载卡顿的有效方法