2017-10-06 3 views
-1

Also habe ich ein super einfaches Skript erstellt, das mir erlaubt, in allen Verzeichnissen zu suchen, von denen das Skript ausgeführt wird, die das erste Argument finden und es durch das zweite ersetzen:Seltsames Verhalten mit Bash-Skript für Dateiargumente

obwohl
#!/usr/local/bin/bash -f 
word_to_look_for=$1 
substitue=$2 

find ./ type f -exec sed -i "" "s/$word_to_look_for/$substitute/g" {} \; 
echo "Replaced ($word_to_look_for) with ($substitue)" 

Aus irgendeinem Grund dieses Bit ->"s/$word_to_look_for/$substitute/g"

würde nur dann ausgegeben als s/wordImlookingfor//g und als Ergebnis sed wäre es mit leeren Text ersetzen, bekommen dies als zu arbeiten beabsichtigt hatte ich das Skript, um die Änderung folgende:

sed_arg="s/$word_to_look_for" 
sed_arg="$sed_arg/$substitue/g" 

find ./ type f -exec sed -i "" "$sed_arg" {} \; 
echo "Replaced ($word_to_look_for) with ($substitue)" 

Ich frage mich nur, warum schien Bash nicht so zu mögen, wie ich es in der ersten Version hatte?

Antwort

1

Sie falsch geschrieben substitute als substitue überall mit Ausnahme von einem Ort:

"s/$word_to_look_for/$substitute/g" 

So bash die Variable $substitute erweitert, die nie festgelegt wurden, während die anderen Variablen ($substitue) gesetzt wurden, aber nie benutzt.

+0

Wow, das ist ... peinlich ... danke, obwohl. – Thermatix