Linux sed不处理bash脚本中的变量;请求一个文件。简单例子

Linux sed不处理bash脚本中的变量;请求一个文件。简单例子,linux,bash,variables,unix,sed,Linux,Bash,Variables,Unix,Sed,如果我在bash脚本中声明了一个变量,然后尝试使用sed对其进行操作,那么就会不断出现错误。我尝试过在变量上使用双引号、反勾号和避免单引号。这就是我正在做的事情 使用多个参数调用我的脚本 ./myScript.sh apples oranges ilike,apples,oranges,bananas 我的目标是使用sed将$3替换为“”,然后使用wc-w计算$3中的单词数 MyScript.sh fruits="$3" checkFruits= sed -i 's/,/ /g' <&l

如果我在bash脚本中声明了一个变量,然后尝试使用sed对其进行操作,那么就会不断出现错误。我尝试过在变量上使用双引号、反勾号和避免单引号。这就是我正在做的事情

使用多个参数调用我的脚本

./myScript.sh apples oranges ilike,apples,oranges,bananas
我的目标是使用sed将$3替换为“”,然后使用wc-w计算$3中的单词数

MyScript.sh

fruits="$3"
checkFruits= sed -i 's/,/ /g' <<< "$fruits"
echo $checkFruits

另外,在无数次谷歌搜索、阅读建议和玩我的代码之后,我根本无法让这个简单的代码示例正常工作,我也不知道为什么。我不能尝试实现wc-w,除非我通过这个模块

-i
选项用于就地编辑输入文件,此处不需要它

要将命令的输出分配给变量,请使用命令扩展,如
var=$(command)

fruits=“$3”

checkFruits=$(sed's/,//g'sed的-i标志需要一个文件参数,如果没有它,sed命令将执行预期的操作

但是,对于这个简单的替换,我将考虑使用<代码> TR < /C> >而不是<代码> SED:

fruits="$3"
checkFruits="$(tr , ' ' <<< $fruits)"
echo $checkFruits
当然,这可以浓缩一点,但只需抛开你真正在做什么的问题。在这里提问时,最好将你的预期结果连同输入数据和你用来解决问题的代码一起发布。

你可以这样做

fruits="$3"
checkFruits="${3//,/ }"
# or 
echo "${3//,/ }"

您根本不需要
sed

IFS=, read -a things <<< "$3"
echo "${#things[@]}"

IFS=,read-a things
-i
仅在macOS上需要扩展参数,在LinuxOn Ubuntu18.04上使用
-i
时不需要扩展参数。i
给出了与OP描述相同的错误。这正是我所需要的。谢谢!很遗憾,我不能给你投票。@Karim你应该能够接受答案(单击答案旁边的复选标记):是的,我完全忘记了bash的内置字符串替换。对于所介绍的用例,这比
sed
tr
都好。
fruits="$3"
checkFruits="$(tr , \\n <<< $fruits)"
itemCount="$(wc -l <<< $checkFruits)"
fruits="$3"
checkFruits="${3//,/ }"
# or 
echo "${3//,/ }"
IFS=, read -a things <<< "$3"
echo "${#things[@]}"