bash string vergleich
Hi, habe da ein kleines Verständnisproblem. Vielleicht kann mir ja einer von Euch helfen zu verstehen, warum die bash das tut. folgender (set -x) output: + local argKey=kernel.sem + local argValue=2500 512000 200 8192 + local locUniqueStationHash=7 + local retFactoryOsSysctlNecessity=1 + local locConfigFileEntry= locSysctlSetting= + local locNewConfigValue locNewSysctlValue + local locSysctlConfigFileEntryNeedsChanges=false + local locSysctlSettingNeedsChanges=false + set -x ++ grep '^[[:space:]]*kernel.sem' /etc/sysctl.conf ++ sed 's@.*=[[:space:]]*@@;s@[[:space:]]\+@ @g' + locConfigFileEntry=2500 512000 200 8192 hier fülle ich locConfigFileEntry ---snip code--- locConfigFileEntry="$(grep "^[[:space:]]*${argKey//./\.}" /etc/sysctl.conf | sed 's@.*=[[:space:]]*@@;s@[[:space:]]\+@ @g')" --- snip --- ++ sysctl kernel.sem ++ sed 's@.*=[[:space:]]\+@@g;s@[[:space:]]\+@ @g' + locSysctlSetting='2500 512000 200 8192' und hier locSysctlSetting. Warum setzt die bash hier ' um die Werte und bei locConfigFileEntry nicht ? ---snip code--- locSysctlSetting="$(sysctl ${argKey//./\.} | sed 's@.*=[[:space:]]\+@@g;s@[[:space:]]\+@ @g')" --- snip --- + [[ -z 2500 512000 200 8192 ]] + [[ 2500 512000 200 8192 != \2\5\0\0\ \5\1\2\0\0\0\ \2\0\0\ \8\1\9\2 ]] + locNewConfigValue=2500 512000 200 8192 + [[ 2500 512000 200 8192 != \2\5\0\0\ \5\1\2\0\0\0\ \2\0\0\ \8\1\9\2 ]] + locSysctlSettingNeedsChanges=true + retFactoryOsSysctlNecessity=0 + locNewSysctlValue=2500 512000 200 8192 und hier der Komplette code, der den output verursacht ---snip code--- set -x local argKey="${1}" local argValue="${2}" # we use the factory station number as unique hash for the dictionary keys local locUniqueStationHash="${argStationNumber}" local retFactoryOsSysctlNecessity="1" local locConfigFileEntry locSysctlSetting local locNewConfigValue locNewSysctlValue local locSysctlConfigFileEntryNeedsChanges="false" local locSysctlSettingNeedsChanges="false" locConfigFileEntry="$(grep "^[[:space:]]*${argKey//./\.}" /etc/sysctl.conf | sed 's@.*=[[:space:]]*@@;s@[[:space:]]\+@ @g')" locSysctlSetting="$(sysctl ${argKey//./\.} | sed 's@.*=[[:space:]]\+@@g;s@[[:space:]]\+@ @g')" if [[ -z "${locConfigFileEntry}" ]] || [[ "${locConfigFileEntry}" != "${argValue}" ]] ; then locSysctlConfigFileEntryNeedsChanges="true" retFactoryOsSysctlNecessity=0 fi locNewConfigValue="${argValue}" if [[ "${locSysctlSetting}" != "${argValue}" ]] ; then locSysctlSettingNeedsChanges="true" retFactoryOsSysctlNecessity=0 fi locNewSysctlValue="${argValue}" set +x --- snip --- Danke für Eure Hilfe -- Christian ------------------------------------------------------------ https://join.worldcommunitygrid.org?recruiterId=177038 ------------------------------------------------------------ http://www.sc24.de - Sportbekleidung ------------------------------------------------------------ -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo, Am Mon, 07 May 2018, Christian schrieb: [..] Geht das vielleicht auch weniger konfus und auf das wesentliche oder besser noch, auf ein minimales Beispiel, eingedampft? Und v.a.: verwende keine unnötig lange, quasi-identische, mit irgendwelchen Sperenzchen garnierten, sondern _einfache_ _kurze_ _eindeutige_ _aussagekräftige_ Variablennamen! Was ist deine eigentliche Frage überhaupt? -dnh -- Wer meine Sachen für siggwürdig hällt der soll sie dann eben würdig sioggen. [Woko° in dag°] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 10.05.2018 um 13:33 schrieb David Haller:
Hallo,
Am Mon, 07 May 2018, Christian schrieb: [..]
Geht das vielleicht auch weniger konfus und auf das wesentliche oder besser noch, auf ein minimales Beispiel, eingedampft?
Und v.a.: verwende keine unnötig lange, quasi-identische, mit irgendwelchen Sperenzchen garnierten, sondern _einfache_ _kurze_ _eindeutige_ _aussagekräftige_ Variablennamen!
Was ist deine eigentliche Frage überhaupt?
Auf diese Antwort habe ich bereits von dir gewartet ;) Mir ging da gestern bereits Selbiges durch den Kopf :D Manfred -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 10.05.2018 um 13:33 schrieb David Haller:
Geht das vielleicht auch weniger konfus und auf das wesentliche oder besser noch, auf ein minimales Beispiel, eingedampft? Tja, das kommt immer auf die Sichtweise an ... Deine scheint da definitiv anders zu sein als meine ... Ich war jedenfalls der Meinung bereits genau das getan zu haben ...
Und v.a.: verwende keine unnötig lange, quasi-identische, mit irgendwelchen Sperenzchen garnierten, sondern _einfache_ _kurze_ _eindeutige_ _aussagekräftige_ Variablennamen!
Wie ich die Variablen benenne ist hier unerheblich. Du kannst Deine gerne so benennen, wie Du magst.
Was ist deine eigentliche Frage überhaupt?
Die hatte sich leider zu sehr im Text versteckt, vielleicht hätte ich das übersichtlicher posten sollen ... Am 10.05.2018 um 13:36 schrieb Manfred Kreisl:
Auf diese Antwort habe ich bereits von dir gewartet ;) Mir ging da gestern bereits Selbiges durch den Kopf :D Trittbrettfahrer ? Der nur dann seinen _Senf_ dazu gibt, wenn ein anderer es bereits getan hat ?
faktisch geht es um den den Inhalt von 3 Variablen argValue locConfigFileEntry locSysctlSetting die werden alle 'verglichen' und sollen alle den gleichen Inhalt haben. Optisch haben Sie auch den gleichen Inhalt, jedoch wenn die bash vergleicht, dann einmal nicht und einmal doch ... das hat mich eben verwirrt und deswegen habe ich auch hier um Hilfe ersucht. Grundsätzlich hat mich verwundert, daß die bash die beiden loc* Variablen unterschiedlich im 'set -x' mode 'anzeigt' ... nämlich: + locConfigFileEntry=2500 512000 200 8192 und + locSysctlSetting='2500 512000 200 8192' Hier noch einmal die entscheidende Frage: Warum ist das eine MIT single quotes und das ander OHNE ? In der Zwischenzeit war ich im IRC von bash, dort hat man mir bereits geholfen, wie ich dem Problem näher komme und es dann auch löse. Und das geschah, ohne daß ich von der Seite _angeblökt_ wurde, wie z.B. von Euch. Ich danke Euch recht herzlich für die herzliche Antwort. Damit es anderen vielleicht hilft ... Problemverursacher waren "Non-breaking spaces" Problemnäherung: declare -n argValue locConfigFileEntry locSysctlSetting printf %s "${argValue}" | od -tx1 -An printf %s "${locConfigileEntry}" | od -tx1 -An printf %s "${locSysctlSetting}" | od -tx1 -An argValue wird im 'Ursprung' aus einer config eingelesen, dort hatten sich die 'Non-breaking spaces' (vermutlich durch Windows) eingeschlichen. Nach Bereinigung der Ursprungs config war das Problem verschwunden. Ich wünsche Euch beiden noch eine gute Zeit ... Gruß -- Christian ------------------------------------------------------------ https://join.worldcommunitygrid.org?recruiterId=177038 ------------------------------------------------------------ http://www.sc24.de - Sportbekleidung ------------------------------------------------------------ -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Christian schrieb am 10.05.2018 um 17:26:
Am 10.05.2018 um 13:33 schrieb David Haller:
Geht das vielleicht auch weniger konfus und auf das wesentliche oder besser noch, auf ein minimales Beispiel, eingedampft? Tja, das kommt immer auf die Sichtweise an ... Deine scheint da definitiv anders zu sein als meine ... Ich war jedenfalls der Meinung bereits genau das getan zu haben ...
Und v.a.: verwende keine unnötig lange, quasi-identische, mit irgendwelchen Sperenzchen garnierten, sondern _einfache_ _kurze_ _eindeutige_ _aussagekräftige_ Variablennamen!
Wie ich die Variablen benenne ist hier unerheblich. Du kannst Deine gerne so benennen, wie Du magst.
Was soll das geblöke?
Was ist deine eigentliche Frage überhaupt?
Die hatte sich leider zu sehr im Text versteckt, vielleicht hätte ich das übersichtlicher posten sollen ...
Am 10.05.2018 um 13:36 schrieb Manfred Kreisl:
Auf diese Antwort habe ich bereits von dir gewartet ;) Mir ging da gestern bereits Selbiges durch den Kopf :D Trittbrettfahrer ? Der nur dann seinen _Senf_ dazu gibt, wenn ein anderer es bereits getan hat ? Pffrrr....
faktisch geht es um den den Inhalt von 3 Variablen argValue locConfigFileEntry locSysctlSetting
die werden alle 'verglichen' und sollen alle den gleichen Inhalt haben. Optisch haben Sie auch den gleichen Inhalt, jedoch wenn die bash vergleicht, dann einmal nicht und einmal doch ... das hat mich eben verwirrt und deswegen habe ich auch hier um Hilfe ersucht. Grundsätzlich hat mich verwundert, daß die bash die beiden loc* Variablen unterschiedlich im 'set -x' mode 'anzeigt' ... nämlich:
+ locConfigFileEntry=2500 512000 200 8192 und + locSysctlSetting='2500 512000 200 8192'
Hier noch einmal die entscheidende Frage: Warum ist das eine MIT single quotes und das ander OHNE ?
In der Zwischenzeit war ich im IRC von bash, dort hat man mir bereits geholfen, wie ich dem Problem näher komme und es dann auch löse. Und das geschah, ohne daß ich von der Seite _angeblökt_ wurde, wie z.B. von Euch.
*PLONK*
Ich danke Euch recht herzlich für die herzliche Antwort.
Damit es anderen vielleicht hilft ... Problemverursacher waren "Non-breaking spaces"
Problemnäherung: declare -n argValue locConfigFileEntry locSysctlSetting printf %s "${argValue}" | od -tx1 -An printf %s "${locConfigileEntry}" | od -tx1 -An printf %s "${locSysctlSetting}" | od -tx1 -An
argValue wird im 'Ursprung' aus einer config eingelesen, dort hatten sich die 'Non-breaking spaces' (vermutlich durch Windows) eingeschlichen. Nach Bereinigung der Ursprungs config war das Problem verschwunden.
Ich wünsche Euch beiden noch eine gute Zeit ... Gruß
-- Gruss Bernd -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 10.05.2018 um 18:09 schrieb Bernd Obermayr:
Was soll das geblöke? Das bist ja wohl Du, der hier blökt.
Pffrrr....
ahhh ... noch ein Trittbrettfahrender Senfgeber ... lol.
*PLONK*
*PLONK* -- Christian ------------------------------------------------------------ https://join.worldcommunitygrid.org?recruiterId=177038 ------------------------------------------------------------ http://www.sc24.de - Sportbekleidung ------------------------------------------------------------ -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 2018-05-10 17:26 schrieb Christian:
Wie ich die Variablen benenne ist hier unerheblich. Du kannst Deine gerne so benennen, wie Du magst. Es ist solange unerheblich, solange Du der Einzige bist der den Code verstehen soll.
Hier erwartest Du von Anderen, dass sie Deinen Code verstehen und in Deinem Code Fehler für Dich finden. Wenns doch wahr ist... Grrr... -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (5)
-
Bernd Obermayr
-
Christian
-
David Haller
-
Manfred Kreisl
-
Norbert Zawodsky