我的bash脚本有一个$c
在sed
-line中调用的变量,后面紧跟另一个参数 - 而bash(实际上相当合乎逻辑)似乎认为另一个参数属于变量名,使其无用/为空.
(...)
c=$(printf "%02d" $(echo "$i+1"|bc))
sed -n "$cq;d" /var/www/playlisten.txt|cut -c 4-
(...)
Run Code Online (Sandbox Code Playgroud)
第一行设置临时变量,然后将其作为sed参数调用.我需要显示$c
在c之后结束的bash 以及变量未命名$cq
(当然是空的)...
任何想法都将一如既往地受到高度赞赏.
谢谢,克里斯蒂安
PS.我正在努力实现的目标:)这是一个循环,步骤通过00..50,在循环内数字本身是需要的,但也是数字+1.以防万一有人想知道.
您需要使用${c}q
以防止贪婪的处理(bash
尽量使用尽可能多的有效字符):
pax$ export cq=111
pax$ export c=222
pax$ echo $cq
111
pax$ echo ${c}q
222q
Run Code Online (Sandbox Code Playgroud)
我还应该提一下,如果性能对您很重要,您希望尝试最小化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
Run Code Online (Sandbox Code Playgroud)
这输出:
count is 0, sed string is '1q;d'.
count is 1, sed string is '2q;d'.
count is 2, sed string is '3q;d'.
count is 3, sed string is '4q;d'.
count is 4, sed string is '5q;d'.
count is 5, sed string is '6q;d'.
count is 6, sed string is '7q;d'.
count is 7, sed string is '8q;d'.
count is 8, sed string is '9q;d'.
count is 9, sed string is '10q;d'.
Run Code Online (Sandbox Code Playgroud)
您也可以将其合并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
Run Code Online (Sandbox Code Playgroud)