我在终端中输入了一组字符串作为输入。我需要使用 shell 将".awk"
子字符串替换为每个字符串中的".sh"
,然后输出修改后的字符串。
我写了这样的脚本:
#!/bin/bash
while read line
do
result=${line/.awk/.sh}
echo $result
done
但它给了我一个错误:script-ch.sh: 6: script-ch.sh: Bad substitution
。
如何更改此简单脚本以修复错误?
UPD: ".awk"
可能在字符串中。例如:"file.awk.old"
。
答案 0 :(得分:3)
如果您使用Bash,那么您的替换没有任何问题。当bash substring replacement 被定制为完成这项工作时,没有理由产生额外的子shell并使用单独的实用程序:
$ fn="myfile.awk.old"; echo "$fn --> ${fn/.awk/.sh}"
myfile.awk.old --> myfile.sh.old
注意:如果您将.sh
替换为.awk
,则.
是不必要的。一个简单的${fn/awk/sh}
就足够了。
我怀疑你的原始剧本中有一些混乱的DOS字符。
答案 1 :(得分:2)
不确定为什么它适合你而不适合我..可能是你给它的输入。它可能有一个空间。
这应该有效:
#!/bin/bash
while read line
do
result=$(echo $line | sed 's/\.awk/\.sh/')
echo $result
done