linux shell將變量拼接到命令中
有這個(gè)一個(gè)場(chǎng)景:需要寫多個(gè)定時(shí)任務(wù)提交到y(tǒng)arn,這些任務(wù)都是同一時(shí)間啟動(dòng)的。原先的做法是,所有的啟動(dòng)命令都使用linux的crontab,但是因?yàn)槿蝿?wù)過(guò)多,所以crontab里的內(nèi)容越來(lái)越多,不好管理,改時(shí)間也不方便,所以這里寫腳本進(jìn)行管理。
同時(shí)為了方便查看任務(wù),每個(gè)任務(wù)的名字,將當(dāng)前時(shí)間的時(shí)分拼接到y(tǒng)arn的任務(wù)的name上。
linux拼接字符串
這個(gè)就涉及到了linux獲取當(dāng)前時(shí)間和拼接字符串的問題了。本人不是主攻這個(gè)方向,所以就是邊百度邊寫,獲取時(shí)間:
time1=$(date "+%Y_%m_%d-%H_%M") echo $time1
linux拼接字符串的規(guī)則:
#!/bin/bash name="Shell" url="http://c.biancheng.net/shell/" str1=$name$url #中間不能有空格 str2="$name $url" #如果被雙引號(hào)包圍,那么中間可以有空格 str3=$name": "$url #中間可以出現(xiàn)別的字符串 str4="$name: $url" #這樣寫也可以 str5="${name}Script: ${url}index.html" #這個(gè)時(shí)候需要給變量名加上大括號(hào) echo $str1 echo $str2 echo $str3 echo $str4 echo $str5
運(yùn)行結(jié)果:
Shellhttp://c.biancheng.net/shell/
Shell http://c.biancheng.net/shell/
Shell: http://c.biancheng.net/shell/
Shell: http://c.biancheng.net/shell/
ShellScript: http://c.biancheng.net/shell/index.html
對(duì)于第 7 行代碼,$name 和 $url 之間之所以不能出現(xiàn)空格,是因?yàn)楫?dāng)字符串不被任何一種引號(hào)包圍時(shí),遇到空格就認(rèn)為字符串結(jié)束了,空格后邊的內(nèi)容會(huì)作為其他變量或者命令解析。
命令行里拼接字符串
獲取到date了,拼接進(jìn)命令行就行。
這里先舉個(gè)其他例子:
name="abc" touch /home/$name
這樣等同于 touch /home/abc。
如果涉及到拼接的字符串前后都還有內(nèi)容:
name="abc" touch /home/${name}123
這樣等同于 touch /home/abc123。
我碰到的問題
按理說(shuō)萬(wàn)事俱備,只欠東風(fēng)。我將命令寫成了:
time1=$(date "+%Y_%m_%d-%H_%M") ... "name":"abc${time1}" ...
但是執(zhí)行以后去yarn的ui去看,任務(wù)名字不是我想像的前綴加時(shí)間,而是abc${time1},非常郁悶,想不通,開始找哪里出問題了。
最后發(fā)現(xiàn),問題出在了引號(hào)上。
name那條語(yǔ)句,是被單引號(hào)括起來(lái)的,shell腳本中,在單引號(hào)里,變量是不被替換的,問題出在這里了。那么如何解決呢?
time1=$(date "+%Y_%m_%d-%H_%M") ' ... "name":"abc'${time1}'" ...'
把變量排除在單引號(hào)之外即可。
單引號(hào)的一些注意的地方
在單引號(hào)中的任何字符都會(huì)原樣輸出,單引號(hào)字符串中的變量是無(wú)效的。
#!/bin/bash
name="abc" echo '123 $name' echo '在單引號(hào)中使用\"$name\"也是沒有用的哦'
輸出:
123 $name
在單引號(hào)中使用\"$name\"也是沒有用的哦
順便說(shuō)一下,shell腳本中字符串可以使用雙引號(hào)、單引號(hào)、不使用引號(hào)來(lái)定義。在不使用引號(hào)的情況下字符串中間不可以有空格。
#!/bin/bash a="aaa"; b='bbb'; c=ccc echo $a echo $b echo $c
執(zhí)行腳本輸出:
aaa
bbb
ccc
到此這篇關(guān)于linux shell將變量拼接到命令中的文章就介紹到這了,更多相關(guān)linux shell變量拼接內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux crontab 實(shí)現(xiàn)每秒執(zhí)行的實(shí)例
下面小編就為大家?guī)?lái)一篇linux crontab 實(shí)現(xiàn)每秒執(zhí)行的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04用于檢測(cè)進(jìn)程的shell腳本代碼小結(jié)
本文介紹一段shell腳本,它可以檢測(cè)某進(jìn)程或某服務(wù)是否正在運(yùn)行,然后以郵件通知。有需要的朋友參考下2013-11-11Shell常見知識(shí) 方便想學(xué)習(xí)linux shell的彭玉
本文給大家介紹了一些Shell小知識(shí),供參考學(xué)習(xí)2013-01-01如何實(shí)現(xiàn)ls命令在Win7下正常運(yùn)行
ls命令是Linux系統(tǒng)下最常用的命令之一,使用ls指令可列出目錄中的內(nèi)容,包括文件和子目錄的名稱,下面通過(guò)本文給大家分享如何實(shí)現(xiàn)ls命令在Win7下正常運(yùn)行,需要的朋友參考下吧2018-03-03shell 通過(guò)makefile傳參給c語(yǔ)言的實(shí)現(xiàn)示例
本文主要介紹了shell 通過(guò)makefile傳參給c語(yǔ)言的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03一天一個(gè)shell命令 linux文件操作系列-ln命令詳解
這篇文章主要介紹了一天一個(gè)shell命令 linux文件操作系列-ln命令詳解 ,需要的朋友可以參考下2016-06-06Linux shell select菜單選擇實(shí)現(xiàn)代碼
主要介紹了Bash Shell中的select命令簡(jiǎn)單使用示例,通常用于流程控制功能的實(shí)現(xiàn),需要的朋友可以參考下2021-07-07shell腳本for循環(huán)實(shí)現(xiàn)文件和目錄遍歷
本文主要介紹了shell腳本for循環(huán)實(shí)現(xiàn)文件和目錄遍歷,首先進(jìn)行一個(gè)要遍歷的文件夾,然后循環(huán)查看每個(gè)文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11