問(wèn)題:
今天在通過(guò)shell腳本用gnuplot批量畫(huà)圖時(shí)遇到一個(gè)問(wèn)題赏殃,即各個(gè)數(shù)據(jù)文件名稱(chēng)不同畏浆,用“ plot 'datafile_suffix.dat' ”命令時(shí)無(wú)法正確讀取到各個(gè)文件同蜻,好在文件名有相同的前綴datafile怕吴,后綴也是有規(guī)律的,可以用for循環(huán)匹配變量名席纽,但是有點(diǎn)麻煩,我就用了另一個(gè)辦法屑彻。
解決:
用“find”查找數(shù)據(jù)文件验庙,然后把查找結(jié)果傳遞給變量,進(jìn)而通過(guò)讀取變量名畫(huà)圖社牲。文字描述有點(diǎn)饒人粪薛,命令其實(shí)很簡(jiǎn)單(比如數(shù)據(jù)文件名為datafile_suffix.dat):
filename=`find $dir/datafile_*`
echo "
plot '$filename'
" | gnuplot
上述代碼中等號(hào)前后不能有空格,且等號(hào)后的“** **”是鍵盤(pán)上方的數(shù)字鍵 1 左邊那個(gè)按鍵搏恤,而不是單引號(hào)违寿,其作用為“**
”之內(nèi)的命令將被先執(zhí)行(此處即為“ find $dir/datafile_ ”),其中的“ $dir ”為數(shù)據(jù)文件所在文件夾的名稱(chēng)熟空。另外藤巢,echo** 后面必須用雙引號(hào)而不是單引號(hào),否則plot 命令后跟的變量$filename將不能正確取用息罗。
注: 此備注只是簡(jiǎn)單的方法思路掂咒,實(shí)際程序還要用for循環(huán)遍歷所有存放數(shù)據(jù)的文件夾。
補(bǔ):有個(gè)問(wèn)題不明白
~ # a=Documents/
~ # echo $a
Documents/
即將一個(gè)路徑名稱(chēng)賦值給變量迈喉,顯示正常绍刮,但是:
~ # i=1
~ # a$i=Documents/
bash: a1=Documents/: No such file or directory
即變量名中有變量代換時(shí)無(wú)法正確賦值。好像是執(zhí)行$i代換就相當(dāng)于執(zhí)行了一步命令弊添,所以** a$i=Documents/ 就等價(jià)于對(duì)一個(gè)名為 a1=Documents/ 的文件或文件夾操作录淡,但并沒(méi)有這個(gè)文件或文件夾捌木,于是發(fā)生錯(cuò)誤油坝,此處的” = **“的變量賦值功能消失了,變成了字符串的一部分刨裆。
不知道該如何解決澈圈,目的是批量定義變量,且變量?jī)?nèi)容為路徑名稱(chēng)帆啃,如下(錯(cuò)誤代碼):
for i in {1..10}; do var$i=~Documents/data$i;done