Se você citar cada parâmetro, ele será tratado adequadamente como um parâmetro posicional:
#!/usr/local/bin/bash
f() {
echo "function was called with $# parameters:"
while ! [[ -z $1 ]]; do
echo " '$1'"
shift
done
}
f "param 1" "param 2" "a third parameter"
$ ./459461.sh
function was called with 3 parameters:
'param 1'
'param 2'
'a third parameter'
Note, entretanto, que as cotas contendo (ou seja, mais externas) são não parte do próprio parâmetro. Vamos tentar uma invocação ligeiramente diferente da função:
$ tail -n1 459461.sh
f "them's fightin' words" '"Holy moly," I shouted.'
$ ./459461.sh
function was called with 2 parameters:
'them's fightin' words'
'"Holy moly," I shouted.'
Observe que '
s na saída em torno dos parâmetros reproduzidos são provenientes da instrução echo
na função e não dos próprios parâmetros.
Para personalizar seu código de exemplo para ter mais reconhecimento de citações, podemos fazer isso:
C=mycommand
f() {
$C "unchanging first parameter" "$1"
}
# let's call it
f 'another string that includes many spaces and double quotes'
Ou isto:
C=mycommand
f() {
$C "$1" "$2"
}
# let's call it
f 'Some string with "quotes" that are scary' 'some other "long" string'