bash:变量名后面直接跟其他参数?
我的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(当然是空的) 任何想法都将一如
$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-