为什么我不允许在 for 循环中添加括号?

为什么我不允许在 for 循环中添加括号?

我的代码是:

dnafile=$1

for seq in (fold -w3 $dnafile | uniq); do
              fold -w3 $dnafile | grep $seq | wc -l
              echo $seq
              echo '(new line)'
done

我收到错误:

syntax error near unexpected token `('

答案1

看起来您只想计算 产生的唯一行的数量fold -w3 $dnafile。这可以在没有循环的情况下完成:

fold -w3 "$dnafile" | sort | uniq -c

会对sort输出的行进行排序,fold同时uniq -c会计算每行连续出现的次数。

结果中的每个唯一行的输出将是一行,fold并带有数字前缀。


语法错误来自于命令替换(即由命令的输出替换的构造)需要看起来像 的事实$( ... )。我不确定插入缺失的内容$实际上会让你的代码工作,因为 shell 仍然会在换行符和空格上分割结果文本,但由于我们不知道输入数据是什么样的,所以很难推测。

(...)不允许在 for 循环中的该位置有子 shell 。

答案2

你输$(fold -w3 $dnafile | uniq)。尝试这个:$(fold -w3 $dnafile | uniq)

$()是命令替换的语法,同时()引入了子shell。

相关内容