2016-11-03 2 views
0

Ich möchte ein Array zu einem Array direkt in bash zuweisen. Bitte beachten Sie folgende,Kann ich einem Array direkt in bash ein Augment zuweisen?

function chmod_func() { 
    local file_path="$1" 
    local chmod_options=(${2:='-R 744'}) # This line has error. 
    sudo chmod "${chmod_options[@]}" "${file_path}" 
} 

chmod_func "test.txt" 

Die Fehlermeldung folgt,

$2 : cannot assign in this way 

Wenn jemand Lösungen kennt, lassen Sie es mich wissen. Vielen Dank.

+0

Welche Version von bash verwenden Sie? Das einzige Problem, das ich sehen kann, ist, dass Sie die Option rückwärts angeben; sollte "-R 774" sein, nicht "774 -R" ... –

+0

@ I'L'I: Es tut mir leid, dass ich etwas richtiges gefragt habe. Es funktioniert auch in meinem Bash. Der obige Code ist ein Teil des ursprünglichen Codes, der einen Fehler aufweist. Ich hätte den extrahierten Code testen sollen. Ich entschuldige mich noch einmal. Ich werde diese Frage in 3 Minuten löschen. – mora

+0

@ I'L'I: Ich ändere meine Meinung Ich werde diese Frage nicht löschen, sondern sie schließen, weil die Antwort von cdarke unten nützlich ist. Es gibt eine Lösung. – mora

Antwort

3

Beachten Sie den Kommentar von @ l'L'l über die Reihenfolge der Parameter zu .

Sie können einzelne Elemente auf verschiedene Arten festlegen. Zunächst wird die Syntax, die Sie verwenden wollten:

chmod_options=([2]='744 -R') 
echo ${chmod_options[@]} 
echo ${!chmod_options[@]} 

Gibt:

744 -R 
2 

Aber man kann einfach:

chmod_options[2]='744 -R' 

Was für ein Puzzle ist Deshalb Sie es tun wollen . Es scheint in dem von Ihnen gegebenen Beispiel in keiner Weise nützlich zu sein.

Was Sie hier nicht tun, ist die Verwendung des zweiten Parameters zur Funktion $2, aus irgendeinem Grund kodieren Sie den Wert in der Funktion hart. Sie können nicht dies tun:

2='744 -R'   # illegal 

Aber wenn Sie ein Array benötigen, können Sie dies tun:

chmod_options[2]="$2" 

oder dies:

chmod_options="$2" 

Beachten Sie die Doppel Anführungszeichen verwendet hier .

Sie brauchen nicht wirklich ein Array in Ihrem Beispiel, hier meine Version ist, die nur die Parameter verwendet:

function chmod_func() { 
    local file_path="$1" 
    shift # remove the first parameter 

    sudo chmod [email protected] "${file_path}" 
} 

chmod_func "test.txt" -R 744 
Verwandte Themen