1
这3.sh读取第一个参数指定的文件的内容,并取代在第二参数倒数第二参数由最后参数所指定的字中指定的单词的所有事件。为什么这个bash脚本无法修改文件?
$cat file.txt
Hello NZ! How r u? Hey NZ! How r u?
$./3.sh file.txt NZ Hey Baby
Hello Baby! How r u? Baby Baby! How r u?
下面是我的代码:
#!/bin/bash
list=($1 $2 $3 $4 $5 $6 $7 $8 $9)
str="`cat ${list[0]}`"
for ((i=1; i<$#-1; i++))
do
str="${str//${list[i]}/${list[i+1]}"
done
echo $str > $1
一个问题是,在str =“$ {str ...”行中有一个'}'太少。你应该使用'file =“$ {1:?}”; shift'来分别捕获文件名。只要文件很小,这应该可以工作,但是使用'sed'而不是原始''bash'很诱人。 –
在查找匹配时出现错误消息'意外的EOF'“'告诉你一个关闭'''无法识别。然后你可以把两个关闭的'''作为潜在的问题点,这很快导致@JonathanLeffler指出的错误关闭'}'。如果可以的话,尽量发布错误信息。 – dangenet