Załóżmy, że jesteś w bardziej sztywny zestaw -up i NIE MOŻESZ zmienić linii poleceń i zrobić jest bardziej "przyjazny", uciekając przed podwójnymi cytatami. Na przykład:
example_script.sh argument_without_quotes "argument with quotes i cannot escape"
pierwsze uważają, że wewnątrz skryptu nie można stwierdzić, czy argument jest przekazywany z lub bez cudzysłowów, ponieważ powłoka pozbawia je.
Więc co można ewentualnie zrobić to odbudowy cudzysłowów argumentów zawierających spacje
Przykład ten odbudowuje całą linię poleceń dwukrotnie przytoczyć argumenty, które mają białe przestrzenie
#!/bin/sh
#initialize the variable that will contain the whole argument string
argList=""
#iterate on each argument
for arg in "[email protected]"
do
#if an argument contains a white space, enclose it in double quotes and append to the list
#otherwise simply append the argument to the list
if echo $arg | grep -q " "; then
argList="$argList \"$arg\""
else
argList="$argList $arg"
fi
done
#remove a possible trailing space at the beginning of the list
argList=$(echo $argList | sed 's/^ *//')
#pass your argument list WITH QUOTES
echo "my_executable" $argList
#my_executable $argList
Uwaga to ograniczenie . Jeśli uruchomić ten przykład
dostaniesz to wyjście
my_executable "argument with spaces" argument_without_spaces argument_doublequoted_but_without_spaces
zanotować ostatni argument: skoro nie miała miejsca, nie został ponownie ujęty w cudzysłów, ale nie powinno to być problemem.
A następnie można użyć 'IFS', aby uniknąć cytowania piekła zademonstrowanego w innych odpowiedziach, jeśli chce się zrobić coś użytecznego z takimi parametrami ... –