【发布时间】:2015-08-02 04:42:19
【问题描述】:
我正在尝试编写一个脚本,可以在后台启动收音机
#!/bin/sh
for (( i = 80 ; i <= 101; i++ ))
do
amixer cset numid=1 i$% sleep 60;
done
但我有问题:
alarmclock-vol.sh: 3: alarmclock-vol.sh: Syntax error: Bad for loop variable
【问题讨论】:
-
因为sh isn't bash。
for (( … ))在 sh 中不可用。 -
@kojiro:
sh可能是也可能不是bash;在某些系统上,/bin/sh是指向/bin/bash的符号链接,上面的脚本可能会起作用。无论如何,你当然不应该假设它是。 -
@KeithThompson,尽管
sh是指向bash的符号链接,但当作为 sh(启用 posix 模式)调用时,bash 的行为也会有所不同。因此,即使 sh 是 bash,“sh is not bash”仍然适用。 -
@geirha:在我的 Debian 6 系统上,
/bin/sh是指向/bin/bash的符号链接,for (( ... ))语法在带有#!/bin/sh的脚本中工作;#!/bin/dash它给了我"Syntax error: Bad for loop variable"。 (如果重要的话,那就是 bash 4.1.5。) -
@KeithThompson,是的,某些语法仍然有效(如本例中的
for ((...))),有些行为略有不同(source和.内置函数),而某些语法完全禁用(如进程替换<(...)和>(...))。这些只是现在想到的例子。