[英]Bash Scripting - Variable Concatenation
對 Linux 和 Bash 腳本完全陌生,我一直在嘗試以下腳本:
declare -a names=("Liam" "Noah" "Oliver" "William" "Elijah")
declare -a surnames=("Smith" "Johnson" "Williams" "Brown" "Jones")
declare -a countries=()
readarray countries < $2
i=5
id=1
while [ $i -gt 0 ]
do
i=$(($i - 1))
rname=${names[$RANDOM % ${#names[@]}]}
rsurname=${surnames[$RANDOM % ${#surnames[@]}]}
rcountry=${countries[$RANDOM % ${#countries[@]}]}
rage=$(($RANDOM % 5))
record="$id $rname $rsurname $rcountry"
#record="$id $rname $rsurname $rcountry $rage"
echo $record
id=$(($id + 1))
done
上面的腳本產生以下結果:
1 Liam Williams Andorra
2 Oliver Jones Andorra
3 Noah Brown Algeria
4 Liam Williams Albania
5 Oliver Williams Albania
但是當行record="$id $rname $rsurname $rcountry"
被注釋並且行record="$id $rname $rsurname $rcountry $rage"
處於活動狀態時,問題變得明顯,其中第二次執行的確切 output 是:
4William Johnson Albania
2Elijah Smith Albania
2Oliver Brown Argentina
0William Williams Argentina
3Oliver Brown Angola
我正在讀取國家/地區的文件如下所示:
Albania
Algeria
Andorra
Angola
Argentina
你能解釋一下為什么會發生這種情況嗎?
您的國家/地區輸入文件具有 DOS 樣式的<cr><lf>
(回車換行)行結尾。
當您從文件中讀取行時, countries
數組的每個元素最終看起來像somename<cr>
,並且在打印時<cr>
將 cursor 移回行首,因此$rage
的內容最終被覆蓋行的開頭。
解決方法是將您的國家/地區輸入轉換為使用 Unix 樣式(僅限<lf>
)行尾。 例如,您可以使用dos2unix <inputfile> > <outputfile>
來執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.