- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个简短的脚本来生成一个格式化字符串,以便在 Macintalk 中进行音节合成。我想每 20 个音节插入一个静音,因此我编写了一个 for 循环,其中包含存储在临时文件中的计数器和嵌套的 elif 语句,该语句应该在每次计数器达到 20 时添加一个静音命令。计数器在达到 20 后重置20.
出于某种原因,我无法预测,仅在第一次发现条件为真时才访问 elif。换句话说:计数器第一次达到 20 时,它会插入静音命令、重置并继续循环。第二次计数器达到 20 时,elif 不再被访问并继续增长,直到 $k 达到最大值。
有人知道为什么这段代码不起作用吗?
编辑**这里是根据大众要求稍长的摘录=)
如果您想尝试重现,以下是文件的链接: syllables_phncode.txt cbsyllindx.txt
# Load Syllables
echo ''
echo 'Opening Syllable Transcription for Victoria'
echo ''
syllfile=./syllables_phncode.txt
syllables=$(cat $syllfile)
syllarray=()
counter=0;
# Create Indexed Array of Phonological Code for Syllables
for k in $syllables
do
echo $counter
echo $k
syllarray[counter]=$k
counter=$(($counter + 1));
done
# Load syllable index for stimulus stream
indxfile=./cbsyllindx.txt
indx=$(cat $indxfile)
stream=''
tempfile=count.tmp
echo 0 > $tempfile
echo '====================================================================================='
echo 'Counter Balanced Stimulus Order (Indexed by Syllables in Alphabetical Order)'
echo '====================================================================================='
echo $indx
echo '====================================================================================='
echo ''
echo 'Creating counterbalanced stimulus stream string with proper Macintalk formatting'
echo ''
for k in $indx
do
counter=$[$(cat $tempfile) + 1]
echo $counter > $tempfile
if [ $k -eq 0 ]; then
stream=$stream'@_'${syllarray[k]}
elif [ $counter -eq 20 ]; then
echo Adding Silence after syllable: ${syllarray[k]}
stream=$stream'_'${syllarray[k]}'[[ slnc 20 ]]'
echo 0 > $tempfile
else
stream=$stream'_'${syllarray[k]}
fi
done
unlink $tempfile
echo '------------------------------------------------------'
echo 'Printing Stream to Screen'
echo '------------------------------------------------------'
echo $stream
这是由该脚本创建的字符串:
_tUW_dAE_rOW_pIY_gOW_lAE@_bIY_kUW_tIY_tUW_dAE_rOW_pIY_gOW_lAE_bUW_dOW_pAE_pIY_gOW[[slnc20]]_lAE@_bIY_kUW_tIY_tUW_dAE_rOW_bUW_dOW_pAE@_bIY_kUW_tIY_pIY_gOW_lAE_bUW_dOW_pAE@_bIY_kUW_tIY_pIY_gOW_lAE_tUW_dAE_rOW@_bIY_kUW_tIY_bUW_dOW_pAE_pIY_gOW_lAE_tUW_dAE_rOW_bUW_dOW_pAE_tUW_dAE_rOW@_bIY_kUW_tIY_bUW_dOW_pAE_pIY_gOW_lAE@_bIY_kUW_tIY_tUW_dAE_rOW_pIY_gOW_lAE_bUW_dOW_pAE@_bIY_kUW_tIY_pIY_gOW_lAE_tUW_dAE_rOW@_bIY_kUW_tIY_pIY_gOW_lAE_tUW_dAE_rOW@_bIY_kUW_tIY_bUW_dOW_pAE_pIY_gOW_lAE_bUW_dOW_pAE@_bIY_kUW_tIY_tUW_dAE_rOW_bUW_dOW_pAE_pIY_gOW_lAE@_bIY_kUW_tIY_bUW_dOW_pAE_tUW_dAE_rOW_bUW_dOW_pAE_tUW_dAE_rOW_bUW_dOW_pAE@_bIY_kUW_tIY_pIY_gOW_lAE_bUW_dOW_pAE@_bIY_kUW_tIY_tUW_dAE_rOW@_bIY_kUW_tIY_tUW_dAE_rOW_pIY_gOW_lAE_tUW_dAE_rOW_bUW_dOW_pAE_pIY_gOW_lAE@_bIY_kUW_tIY_bUW_dOW_pAE_tUW_dAE_rOW_pIY_gOW_lAE@_bIY_kUW_tIY_pIY_gOW_lAE_bUW_dOW_pAE_tUW_dAE_rOW@_bIY_kUW_tIY_bUW_dOW_pAE_pIY_gOW_lAE_tUW_dAE_rOW_pIY_gOW_lAE_bUW_dOW_pAE_tUW_dAE_rOW@_bIY_kUW_tIY_pIY_gOW_lAE_tUW_dAE_rOW@_bIY_kUW_tIY_pIY_gOW_lAE_tUW_dAE_rOW_bUW_dOW_pAE@_bIY_kUW_tIY_bUW_dOW_pAE_pIY_gOW_lAE@_bIY_kUW_tIY_bUW_dOW_pAE@_bIY_kUW_tIY_tUW_dAE_rOW_bUW_dOW_pAE_tUW_dAE_rOW_pIY_gOW_lAE@_bIY_kUW_tIY_tUW_dAE_rOW_pIY_gOW_lAE_bUW_dOW_pAE
最佳答案
您的问题是您点击了 $k -eq 0
检查正确时间 $counter
等于 20
但无论如何你都会增加计数器,然后一旦你通过 20
你再也不能击中它了。
您可以通过添加 set -x
来看到这一点到脚本顶部并运行它并查看输出。
您不希望 if/else 进行不相关的检查,它有这个问题。
您可能想要更像这样的东西作为循环体。
if [ $k -eq 0 ]; then
stream=${stream}@
fi
stream=${stream}_${syllarray[k]}
if [ $counter -eq 20 ]; then
stream=$stream'[[ slnc 20 ]]'
fi
这将问题分开。
您也根本不需要(如评论中所示)此处的临时文件。 (除了处理读取文件的子 shell 之外,您没有任何子 shell,这些子 shell 不算数。)
您还可以避免 $(cat file)
使用 $(< file)
的子 shell相反。
您还应该使用$((...))
而不是$[...]
始终如一。
关于bash - 损坏 : Elif in For loop with increment counter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31777232/
我已经查看了 Microsoft 的 MSDN 和整个网络,但我仍然无法很好地了解它是什么。 这是否意味着已完成的程序在执行期间的不同时间加载 DLL,而不是在启动时一次性加载所有 DLL? 我完全偏
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: Is there a performance difference between i++ and ++i
++a = b 操作未显示错误,但 a++ = b 在使用 g++ 编译时显示错误。两个变量都在这些操作之前初始化。 虽然这些操作没有实际用途,但我认为它们在编译时应该会出现相同的错误。你怎么认为?如
在this fiddle ,为什么计数器在调用 increment() 函数时不增加。已将计数器设置为增加对自身的分配后分配,因此在单击事件按钮(多次)后,计数器变量应该增加。 注意:如果我像这样进行
尝试在 iOS 中使用 swift 使用 firebase FieldValue.increment(1) 时,我收到编译器错误。该错误仅表示“‘增量’的使用不明确” 我已将所有 Pod 更新为所有使
我修复了 this question 中的代码这样它就可以编译: #define text (); #define return &argv;return int *** emphasized ()
我需要将每个增量 id 设置为前一个生成的 id 表的增量 id +5。这意味着每次自动增量必须有 5 个间隙。像这个系列2、7、12、17等.. 任何想法请分享。 最佳答案 请检查链接: https
我正在尝试进行设置,将类从 1 增加到 12,并根据变量列表(也是 12 个变量)设置背景颜色。 我很接近,但没有得到我所希望的。这是我第一次涉足 SASS 中的控制指令,所以请原谅我的无知。 目前,
我有以下代码 int cnt = 0; for (int i = 0; i 0 和 N(N-1)/2当所有 a[k] == 0 时。 对于增量的总数,为外部 for 循环添加 N 为
我们有一个方法可以维护我们应用程序中所有事件的全局序列索引。由于它是网站,因此预计具有线程安全的这种方法。线程安全的实现如下: private static long lastUsedIndex =
我有这个简单的表(仅用于测试): create table table ( key int not null primary key auto_increment, name varchar(30)
我见过很多不错的对象池实现。例如:C# Object Pooling Pattern implementation . 但似乎线程安全的总是使用锁,从不尝试使用 Interlocked.* 操作。 编
在 jQuery 中增加值的最佳方法是什么 .data()目的? 最佳答案 这看起来有点奇怪,但根据文档 .data()将所有数据字段作为对象返回,因此您可以直接更改其值: $('#id').data
是 Interlocked.Increment(ref x)比 x++ 快或慢对于各种平台上的整数和多头? 最佳答案 它较慢,因为它强制操作以原子方式发生,并且充当内存屏障,消除了处理器围绕指令重新排
我创建了一个购物车应用。当用户单击同一产品时,我要增加编号。 如果用户单击同一项目10次,则我想这样更新Firestore。 items:[{'productId':'1234','count':10
我需要循环遍历数据数组并为每个数组值打印一个“递增”字母。我知道我可以做到这一点: $array = array(11, 33, 44, 98, 1, 3, 2, 9, 66, 21, 45); //
Firestore 的 FieldValue.increment(someValue) 可以与其他字段正常配合使用,但不能与 map 配合使用。 我正在尝试增加 map 中属性的值。我有一个名为用户的
如果行的faction.factionname 与 INSERT 的 cards.faction 匹配,我正在尝试创建一个触发器,在 INSERT into card 之后增加派系表中的 cardco
我们有一个并发的多线程程序。我如何使样本数每次增加 +5 间隔? Interlocked.Increment 是否有间隔过载?我没有看到它列出。 Microsoft Interlocked.Incre
我正在运行时创建动态类型,目的是从该类型创建/序列化/反序列化对象,然后绑定(bind)到网格控件。一切正常,但我用数据库中的记录更新属性的方式很可悲。我从某个地方粘贴了这个 setter 生成器,当
我是一名优秀的程序员,十分优秀!