2017-09-10 219 views
1

我有哪些需要提供txt文件以下模式shell腳本shell腳本連接兩個字符串

test0000 [email protected] 
test0001 [email protected] 

,並依此類推,直到停止條件(10在這種情況下...)

目前其沒有工作,我嘗試用下面的:

start=「test」 
email=「@gmail.com" 
start=0 
stop=10 


i=0 
while [[ $i -le 10 ]] 
do 
    printf "%s%10d\n" "$start」 "$i" "\n" "$start」 "$email" 

任何想法如何解決呢?我得到了錯誤: 「@ gmail.com:」 無效號碼

+2

你的報價都是錯誤的。 ''「'和''」'不一樣。「 – Mat

+0

要清楚,您的原始代碼在格式字符串中只有兩個佔位符;當你提供兩個以上的參數時,它將從第一個佔位符開始代替 - 因此,假設引號是固定的,'$ start'將放在'%s'中,'$ i'放在'%10d中',因爲'\ n'會在下一個'%s'中出現,'$ start'會嘗試進入'%10d';由於該值不是一個數字,我們得到了我們的錯誤。 (然後,如果我們沒有收到該錯誤,我們會嘗試第三次評估格式字符串),最後留下一個'$ email'參數。 –

回答

0

您可以使用:

start='test' 
email='@gmail.com' 

for ((i=0; i<10; i++)); do 
    printf '%s%04d %s%04d%s\n' "$start" $i "$start" $i "$email" 
done 

test0000 [email protected] 
test0001 [email protected] 
test0002 [email protected] 
test0003 [email protected] 
test0004 [email protected] 
test0005 [email protected] 
test0006 [email protected] 
test0007 [email protected] 
test0008 [email protected] 
test0009 [email protected] 
+0

非常感謝!它的工作,一個問題,如果我想只讀'test0000'和'test0000 @ gmail.com'與IFS,我該怎麼做?我的意思是把它放在varibles ... –

+0

我現在在手機上,所以無法測試一個腳本。查看printf的格式以獲取所有填充和對齊。 – anubhava

+0

將此輸出讀入變量use:'while IFS = read -r str email;做聲明-p str電子郵件;完成 anubhava

1

再舉一個例子用不同的for循環語法:

start="test" 
email="@gmail.com" 

for i in {0000..9};do 
    echo "${start}$i ${start}${i}${email}" 
done 

test0000 [email protected] 
test0001 [email protected] 
test0002 [email protected] 
test0003 [email protected] 
test0004 [email protected] 
test0005 [email protected] 
test0006 [email protected] 
test0007 [email protected] 
test0008 [email protected] 
test0009 [email protected] 

或者,用while循環:

start="test" 
email="@gmail.com" 
count=0 

while [[ $count -lt 10 ]]; do 
    printf '%s%04d %s%04d%s\n' "$start" $count "$start" $count "$email" 
    let count++ 
done