2016-04-23 46 views
1

我有一個字符串數組,我想打印一個用於測試我的C程序的bash腳本。該陣列內容是這樣的:從包含正斜槓的bash中的變量中刪除字符串的一部分

PASSED TESTS: (4) 

✓ tests/test_sample_one.in 
✓ tests/test_sample_two.in 
✓ tests/test_sample_three.in 
✓ tests/test_sample_four.in 

但是我想它打印出來是這樣的:

PASSED TESTS: (4) 

✓ test_sample_one 
✓ test_sample_two 
✓ test_sample_three 
✓ test_sample_four 

這裏是我打印出來的結果編寫的代碼的一部分。我認爲這些都是相關的,但我可以根據要求發佈更多代碼。

我已經成功地使用了線i=${i%.*}刪除就完了.in但行i=${i#*/ }似乎並不在/之前刪除的文字工作。

printf "PASSED TESTS: ($passed_tests)\n\n" 
for i in "${passed_tests_arr[@]}" 
do 
    printf "✓ " 
    i=${i%.*} 
    i=${i#*/ } 
    echo "$i" 
done 
+1

你有你的腳本空白矮一點,刪除空白將做的工作$ {I#* /} – sigmalha

+0

@sigmalha奏效。對於這個問題,堆棧流程的適當方法是什麼?如果刪除問題或回答問題並提供建議,說明爲什麼現在的語法是正確的,它會更好嗎? – joshuatvernon

回答

1

的代碼,除了在第6行

printf "PASSED TESTS: ($passed_tests)\n\n" 
for i in "${passed_tests_arr[@]}" 
do 
    printf "✓ " 
    i=${i%.*} 
    i=${i#*/ } 
    echo "$i" 
done 

腳本空白正確,無空白的代碼是:

printf "PASSED TESTS: ($passed_tests)\n\n" 
for i in "${passed_tests_arr[@]}" 
do 
    printf "✓ " 
    i=${i%.*} 
    i=${i#*/} 
    echo "$i" 
done 

該代碼可以打印正確的輸出:

PASSED TESTS: (4) 

✓ test_sample_one 
✓ test_sample_two 
✓ test_sample_three 
✓ test_sample_four 
0

你有一個額外的空間。
您可以循環使用

printf "PASSED TESTS: ($passed_tests)\n\n" 
for i in "${passed_tests_arr[@]}" 
do 
    # Not needed: printf "✓ " 
    i=${i%.*} 
    # Not needed: i=${i#*/ } 
    echo "${i/ *\// }" 
done 
+0

它不會出現,就好像✓在此打印? – joshuatvernon

+0

我認爲✓是你輸入行的一部分。否則,簡單的替換似乎更好。 –

+0

最後一行然後可以用'echo'替換✓$ {i/* \ //}「' – joshuatvernon

相關問題