Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash:变量名后面直接跟其他参数?_Bash_Variables - Fatal编程技术网

bash:变量名后面直接跟其他参数?

bash:变量名后面直接跟其他参数?,bash,variables,Bash,Variables,我的bash脚本有一个变量$c,它在一个sed-行中被调用,后面紧跟着另一个参数,bash(实际上相当合乎逻辑)似乎认为另一个参数属于变量名,使它变得无用/空 (...) c=$(printf "%02d" $(echo "$i+1"|bc)) sed -n "$cq;d" /var/www/playlisten.txt|cut -c 4- (...) 第一行设置一个临时变量,然后将其称为sed参数。我需要向bash显示$c在c之后结束,并且变量没有命名为$cq(当然是空的) 任何想法都将一如

我的bash脚本有一个变量
$c
,它在一个
sed
-行中被调用,后面紧跟着另一个参数,bash(实际上相当合乎逻辑)似乎认为另一个参数属于变量名,使它变得无用/空

(...)
c=$(printf "%02d" $(echo "$i+1"|bc))
sed -n "$cq;d" /var/www/playlisten.txt|cut -c 4-
(...)
第一行设置一个临时变量,然后将其称为sed参数。我需要向bash显示
$c
在c之后结束,并且变量没有命名为
$cq
(当然是空的)

任何想法都将一如既往地受到高度赞赏

谢谢, 基督教徒


注:我想完成的是:)这是一个for循环,通过00..50步,在循环中需要数字本身,但也需要数字+1。以防有人想知道。

您需要使用
${c}q
来防止贪婪的处理(
bash
尝试使用尽可能多的有效字符):


我还应该提到的是,如果性能对您很重要,那么您希望尽量减少为完成任务而运行的外部进程(如
bc
)的数量。分叉和执行不是无成本的操作,如果您获得
bash
来为短期任务本身完成大部分工作,您将运行得更快

我所说的“短命”是指将一个变量添加到一个变量中。显然,如果您想完成像
sed
这样的大型工作,最好使用专用的外部工具来完成,但是
bash
提供了相当大的功能来替换昂贵的操作,如
i=$(expr$i+1)
i=$(echo“$i+1”| bc)

因此,可以在不使用外部进程的情况下处理增量和其他计算,从而执行
bash
循环:

#!/bin/bash
for ((count = 0; count < 10; count++)) ; do
    ((next = count + 1))
    echo "count is ${count}, sed string is '${next}q;d'."
done
您还可以将
next
合并到
for
循环中:

#!/bin/bash
for ((count = 0, next = 1; count < 10; count++, next++)) ; do
    echo "count is ${count}, sed string is '${next}q;d'."
done
#/bin/bash
for((count=0,next=1;count<10;count++,next++));做
echo“count是${count},sed字符串是${next}q;d”
完成

将变量名放在大括号中:

c=$(printf "%02d" $(echo "$i+1"|bc))
sed -n "${c}q;d" /var/www/playlisten.txt|cut -c 4-
稍微短一点

sed -n "$(printf "%02d" $((i+1)))q;d" /var/www/playlisten.txt|cut -c 4-

愚蠢,愚蠢的我。在另一行中插入一行就成功了:sed-n“$(printf”%02d“$(echo“$i+1”| bc))q;d“/var/www/playlian.txt | cut-c4-很抱歉打扰了大家……)
c=$(printf "%02d" $(echo "$i+1"|bc))
sed -n "${c}q;d" /var/www/playlisten.txt|cut -c 4-
sed -n "$(printf "%02d" $((i+1)))q;d" /var/www/playlisten.txt|cut -c 4-