Découpage /proc/cmdline arguments avec des espaces

La plupart des scripts qui parse /proc/cmdline décomposer en mots, puis filtrer arguments avec une instruction du cas, exemple:

CMDLINE="quiet union=aufs wlan=FOO"
for x in $CMDLINE
do
»···case $x in
»···»···wlan=*)
»···»···echo "${x//wlan=}"
»···»···;;
»···esac
done

Le problème, c'est quand le WLAN ESSID a espaces. Les utilisateurs s'attendent à définir wlan='FOO
BAR " (comme une variable du shell) et ensuite obtenir le résultat inattendu de 'FOO avec le code ci-dessus, depuis la boucle de fentes sur les espaces.

Est-il un meilleur moyen de l'analyse de la /proc/cmdline à partir d'un script shell de tomber à court de près de evaling?

Ou est-il en citant des astuces? Je pensais que je pouvais peut-être demander aux utilisateurs de l'entité en citer des espaces et de décoder comme suit: /bin/busybox httpd -d "FOO%20BAR". Ou est-ce une mauvaise solution?

Votre shell est déjà l'analyse de la ligne de commande, le fractionnement des arguments. Pourquoi voulez-vous "unparse" et de ne pas simplement supposer que l'utilisateur ne citer que l'argument correctement--comme il a à voir avec toute autre commande? Si vous souhaitez supprimer un fichier avec l'espace, vous tapez «rm "fichier avec l'espace"». Que faire si votre ESSID est «essid wlan=TOTO»?
Ok, j'ai fait la même erreur que JesperE...

OriginalL'auteur hendry | 2009-06-14