1

一段时间以来,我一直在尝试教我的兄弟姐妹基本的 bash,然后我决定用 bash 编写一个程序来介绍如何做 bash。但是当涉及到像这样一个简单的while循环这样的变量时,它会回显以教他们它的外观等等

echo "var=1
while [ $var == 1 ]; do
read item
$item
done
t=2"

这是关于 while 循环的第一次教学,它教导了 while 循环如何四处走动,直到被中断打破或不再遵循论点,从而获得 t = 2(进入下一个级别)。但每次我回声我都会得到

var=1
while [ 1 == 1]; do
read item

done
t=2

那么有没有办法呼应美元符号。不用我在我的程序中说我不能回显美元符号,记得把美元符号放在前面。因为我已经知道这会导致这些事情去向的问题。

提前感谢所有回答的人。

4

3 回答 3

6

无论您在哪里,都$VAR将其替换为\$VAR. 简而言之,\ 是一个转义字符,它将“忽略”它后面的特殊字符。

所以在你的情况下,使用\$item.

于 2013-07-11T21:02:45.090 回答
3

您可以使用

cat <<'XXX'
var=1
while [ $var == 1 ]; do
read item
$item
done
t=2
XXX

输出:

var=1
while [ $var == 1 ]; do
read item
$item
done
t=2

不幸cat的是,它是一个外部实用程序。但它可以在没有外部调用的情况下完成:

while read -r x; do echo "$x"; done <<'XXX'
var=1
while [ $var == 1 ]; do
read item
$item
done
t=2
XXX

-r用于read避免将反斜杠视为转义字符。

或者您也可以使用echo单引号:

echo 'var=1
while [ $var == 1 ]; do
read item
$item
done
t=2'

当然还有已经提到的双引号和转义$符号。

于 2013-07-11T21:09:17.080 回答
2

反斜杠。


echo "var=1
while [ \$var == 1 ]; do
read item
\$item
done
t=2"
于 2013-07-11T21:03:32.657 回答