2016-04-23 8 views
1

Ich habe ein Array von Zeichenfolgen, die ich für ein Bash-Skript, das meine C-Programme testet, drucken möchte. Die Arrays Inhalte sind wie folgt aus:Teil einer Zeichenfolge aus einer Variablen in Bash mit einem Schrägstrich entfernen

PASSED TESTS: (4) 

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

ich aber möchte es wie folgt ausdrucken:

PASSED TESTS: (4) 

✓ test_sample_one 
✓ test_sample_two 
✓ test_sample_three 
✓ test_sample_four 

Hier ist der Teil des Codes, die ich zum Ausdrucken der Ergebnisse geschrieben habe. Ich denke, das ist alles, was relevant ist, aber ich kann weiteren Code auf Anfrage posten.

Ich habe erfolgreich die Linie i=${i%.*} die .in am Ende zu entfernen, aber die Linie i=${i#*/ } scheint nicht vor den / bei Entfernen der Zeichen zu arbeiten.

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

Sie in Ihnen Skript leer bekam, den Rohling entfernen wird den Job $ do {i # * /} – sigmalha

+0

@sigmalha, die funktionierte. Was wäre die geeignete Vorgehensweise für Stackover-Flow für diese Frage. Wäre es besser, die Frage zu löschen oder die Frage mit einem Hinweis zu beantworten, warum es jetzt funktionieren würde, wenn die Syntax korrekt ist? – joshuatvernon

Antwort

1

Der Code ist korrekt, außer für einen Rohling in dem Skript in Zeile 6.

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

Ohne den Rohling des Code:

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

Dieser Code dann die richtigen drucken Ausgabe:

PASSED TESTS: (4) 

✓ test_sample_one 
✓ test_sample_two 
✓ test_sample_three 
✓ test_sample_four 
0

Sie haben zusätzlichen Platz.
können Sie die Schleife machen etwas kürzer mit

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

Es scheint nicht so, als ob das ✓ gedruckt wird? – joshuatvernon

+0

Ich dachte das ✓ war Teil deiner Eingabezeilen. Ansonsten scheint ein einfacher Ersatz besser zu sein. –

+0

könnte die letzte Zeile dann durch 'echo 'ersetzt werden ✓ $ {i/* \ //}" ' – joshuatvernon