請教一個問題:
背景:一個檔案夾里面有很多個名稱類似的檔案,比如pi_1_0,pi_2_0,pi_3_1....... 。
目的:shell腳本實作將檔案夾里面找到的所有檔案,在另一個檔案夾里面創建一個處理過的名稱也是一一對應的檔案,比如找到的pi_1_1,處理過的對應也是pi_1_1;
遇到的問題:我在檔案夾里面找檔案的時候檔案名會包含變數,shell腳本識別不了。
for((i=0;i<255;i++))
do
for((j=0;j<255;j++))
do
if[ -e bin/pi_$i_$j_];then #此處包含變數,我遇到的問題處
###
fi
done
done
我嘗試過這樣:
for((i=0;i<255;i++))
do
for((j=0;j<255;j++))
do
b="pi_$i_$j" #用雙引號會使變數展開
if[ -e bin/$b_];then
###
fi
done
done
但是還是不行,應該怎么處理達到我的目的呢?
uj5u.com熱心網友回復:
if[ -e bin/pi_$i_$j_];then 這個地方改成if[ -e bin/pi_${i}_${j}_];then 試一下
uj5u.com熱心網友回復:
$i和$j的值不是一樣的嗎,不需要嵌套,砍掉一個嵌套uj5u.com熱心網友回復:
確實這樣,變數展開時,bash看到$var會把$后面的所有字符、直到第一個分割符為止都當作變數名。
下劃線并非分割符,所以$i_$j相當于${i_}${j},由于i_沒有定義,所以展開為空,最終只有j展開。
為了避免這種情況的發生,一般建議都使用{}包裹住變數名。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/14464.html
標籤:專題技術討論區
上一篇:Linux錯誤
下一篇:ubuntu磁區問題
