所以,这个问题似乎是特定的。这是因为我不是一名BASH程序员,而是一名生物学家 - 为我日常工作的脚本编写者编写了一些有用的脚本。无论如何。说,我有一个for循环,就像这样:
for CHR $(seq 1 22); do
echo "Processing chromosome ${CHR}";
done
我曾经写过`seq 1 22`但现在我学会了写$(seq 1 22)。显然,你写它的方式有所不同。但计算机语言和解释方面的区别是什么?有人可以向我解释一下吗?
我通过简单地在计算机集群的命令行上学到的另一件事就是以不同方式调用“i”。我以前做过:$CHR
。但是,当我有一个文件名sometext_chr
时,我想要添加无效的数字(sometext_chr$CHR
)。工作是什么sometext_chr${CHR}
。这是为什么?有人能帮我解释一下这个区别吗?
同样,我知道这个问题有点具体 - 我根本不知道如何构建它 - 但我希望有人可以教我差异。
谢谢,最好!
桑德
答案 0 :(得分:1)
$(...)
可以轻松嵌套,因为括号清楚地表明表达式的开始和结束位置。使用`,嵌套不是那么简单,因为开始和结束符号是相同的。
你的第二个例子可能来自记忆,因为它不正确。 sometext$chr
和sometext${chr}
都会以同样的方式运作。也许你真正的意思是这样的情况:
$chr_sometext
${chr}_sometext
这里的关键点是_
是变量名中的有效字符。因此,$chr_sometext
是解释器,作为变量chr_sometext
的值。在${chr}_sometext
中,变量显然是chr
,其后面的_sometext
是文字字符串值。就像你写了$chrsometext
一样,你不会认为chr
有些特殊。这就是你必须添加澄清括号的原因。