2016-04-23 1 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 

私は結果をプリントアウトするために書かれたコードの一部です。私はこれがすべて関連していると思うが、私は要求に応じてさらなるコードを投稿できる。

私は最後に.inを削除するために行i=${i%.*}を正常に使用しているが、ライン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

関連する問題