2017-10-06 52 views
-1

所以我建立了一個超級簡單的腳本,允許我搜索所有相對於腳本運行的目錄,它將找到第一個參數並將其替換爲第二個參數:用文件參數的bash腳本的奇怪行爲

#!/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)" 

出於某種原因,雖然,這一點 - >"s/$word_to_look_for/$substitute/g"

只會爲s/wordImlookingfor//g和結果的sed將與空的文本替換它,得到這個像預期的那樣我改劇本的工作輸出如下:

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)" 

我只是想知道,爲什麼bash不像我在第一個版本中那樣?

回答

1

你拼錯substitutesubstitue無處不在,除了一個地方:

"s/$word_to_look_for/$substitute/g" 

所以bash的擴展變量$substitute,這是從來沒有設置,而其他變量($substitue)成立,但從未使用過。

+0

哇,多數民衆贊成在...尷尬...感謝雖然。 – Thermatix