Bash 将变量传递给sed for while循环

Bash 将变量传递给sed for while循环,bash,shell,loops,variables,sed,Bash,Shell,Loops,Variables,Sed,我想使用shell sed从第n行开始循环一个文件,我可以使它适用于整数(下面的示例从第5行开始),但我想用sys参数变量替换整数:linesToBegin=$1 代码如下: sed -n '5,$ p' twitter_ids.txt | while read linecontent do echo $linecontent done 当我将数字5替换为行开始时: sed -n '$linesToBegin,$ p' twitter_ids.txt | while

我想使用shell sed从第n行开始循环一个文件,我可以使它适用于整数(下面的示例从第5行开始),但我想用sys参数变量替换整数:linesToBegin=$1

代码如下:

sed -n '5,$ p' twitter_ids.txt | while read linecontent
do
            echo $linecontent 
done
当我将数字5替换为行开始时:

sed -n '$linesToBegin,$ p' twitter_ids.txt | while read linecontent
我听到一个错误说

sed: -e expression #1, char 3: extra characters after comman

现在应该可以用了。只需要双引号。

单引号不展开变量,双引号展开变量。在shell循环中,您可能一开始就走错了路。看见另外,使用
tail-n+“$linesToBegin”
比使用
sed
跟踪文件更有意义。不幸的是,它对我不起作用,给我:sed:-e表达式#1,char 1:unknown命令:`,@goodboy,令人惊讶的是,它在我的机器上工作正常..好的,现在它工作了,问题是sys arg变量的赋值中有一点空格,我没有注意到
echo“$linecontent”
更好,行可以是一个特殊字符,如
*
。更多的标准是使用大括号,如
echo“${linecontent}”
。当IFS=read-r linecontent时,应该是
@WalterA关于引号的说法是对的,但当仅引用标量变量时,大括号仅适用于需要将变量名与其他字母数字文本分开的情况,例如,
echo“${foo}bar”
,不需要使用其他方式。如果你在做一个像
echo“${foo#*.}”这样的替换
或者使用一个像
echo“${foo[@]}”这样的数组
,那么你会使用它们,但这里不是这样。
linesToBegin="$1"
sed -n "$linesToBegin,\$ p" twitter_ids.txt | while read linecontent
do
            echo "$linecontent"
done