Das Problem ist dabei, dass sich in der Variable ein Leerzeichen befindet, was dazu führt, dass es als zwei Parameter interpretiert wird.
Ich habe dazu in C ein kleines Testtool "check.c" mit folgendem Inhalt geschrieben:
Code: Alles auswählen
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/* Compilieren mit:
gcc check.c -o check.bin
*/
int main(int argc, char *argv[])
{
printf("argc = %i\n", argc);
if (argc != 2)
{
if (argv[1] != "")
{
printf("argv[1] = %s\n", argv[1]);
}
printf("Usage: check 'a b'\n");
exit(0);
}
printf("argv[1] = %s\n", argv[1]);
return 0;
}
In der Konsole kann ich jetzt diesem Programm einen Parameter, der aus zwei Strings und einem Leerzeichen besteht, mit den Hochkommas ' so übergeben, dass die Eingabe als 1 Parameter, und nicht zwei Parameter interpretiert wird.
Beispielausgabe:
Code: Alles auswählen
$ ./check.bin 'aa bb'
argc = 2
argv[1] = aa bb
Code: Alles auswählen
./check.bin aa bb
argc = 3
argv[1] = aa
Usage: check 'a b'
Nun möchte ich das Programm von einem BASH Skript namens checktest.sh aus aufrufen und den zu übergebenden Parameter, zuerst aus dem Inhalt zweiter Variablen zusammensetzen.
Und das Problem ist jetzt hier, dass das mit dem Hochkomma nicht mehr klappt, da der Variableninhalt dann nicht ausgewertet wird.
Code: Alles auswählen
#!/bin/bash
param_1=aa
param_2=bb
gesamt="$param_1 $param_2"
echo $gesamt
./check.bin '$gesamt'
Code: Alles auswählen
./checktest.sh
aa bb
argc = 2
argv[1] = $gesamt
Code: Alles auswählen
# im Skript
./check.bin `$gesamt`
# oder:
./check.bin { $gesamt }