bash 变量的语法在传递给 bc 时会发生变化吗?
Does syntax of bash variables change when being passed to bc?
我注意到 Codewars 上的一个解决方案具有以下语法:
#!/bin/bash
seven () {
bc <<< "
scale=0
counter=0
m=
while( m > 99 ) {
counter = counter + 1
x = m / 10
y = m % 10
m = x - 2 * y
}
print m, \", \", counter
"
}
seven ""
我的问题是关于使用的变量(m、x、计数器)。为什么 bash 允许在不使用 $variable_name 的情况下使用变量?
是否有允许这样做的特殊情况(例如用双引号引起来的代码)?
这些不是 bash 变量,而是 bc 变量。
<<<
运算符引入了一个“Here String”(参见man bash
),后面的词除了路径名扩展和分词外进行扩展,并被发送到命令的标准输入, bc
在这种情况下。
您可以通过这种方式包含任何其他解释器的程序,即
python3 <<< 'x="Hello world!"
print(x)'
或
dc <<< '
100 3 /
p'
还要注意 bash 使用 $x
或 ${x}
,而不是 $(x)
(那将 运行 命令 x
和 return 它的输出)。 $(x)
因为变量 x
在 Makefile 中使用。
该答案中几乎没有 bash
代码。这是一个 shell 函数,除了 运行 bc
什么都不做。此处字符串中的所有内容都是 bc
脚本,与 bash
.
无关
就 bash
而言,这里的字符串不包含任何变量或任何可辨别的结构:它只是不透明的文本,它将提供给 bc
的标准输入。
我注意到 Codewars 上的一个解决方案具有以下语法:
#!/bin/bash
seven () {
bc <<< "
scale=0
counter=0
m=
while( m > 99 ) {
counter = counter + 1
x = m / 10
y = m % 10
m = x - 2 * y
}
print m, \", \", counter
"
}
seven ""
我的问题是关于使用的变量(m、x、计数器)。为什么 bash 允许在不使用 $variable_name 的情况下使用变量?
是否有允许这样做的特殊情况(例如用双引号引起来的代码)?
这些不是 bash 变量,而是 bc 变量。
<<<
运算符引入了一个“Here String”(参见man bash
),后面的词除了路径名扩展和分词外进行扩展,并被发送到命令的标准输入, bc
在这种情况下。
您可以通过这种方式包含任何其他解释器的程序,即
python3 <<< 'x="Hello world!"
print(x)'
或
dc <<< '
100 3 /
p'
还要注意 bash 使用 $x
或 ${x}
,而不是 $(x)
(那将 运行 命令 x
和 return 它的输出)。 $(x)
因为变量 x
在 Makefile 中使用。
该答案中几乎没有 bash
代码。这是一个 shell 函数,除了 运行 bc
什么都不做。此处字符串中的所有内容都是 bc
脚本,与 bash
.
就 bash
而言,这里的字符串不包含任何变量或任何可辨别的结构:它只是不透明的文本,它将提供给 bc
的标准输入。