我一直试图教我的兄弟姐妹基本的打击一段时间,然后我决定用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
有没有办法回应美元符号。没有我不得不在我的程序中说我不能回应一个美元符号记得把美元符号放在这个前面。因为我已经知道这会导致这些事情发生的问题。
先谢谢所有回答的人。
答案 0 :(得分:5)
只要您$VAR
,请将其替换为\$VAR
。简而言之,\是一个转义符,它会“忽略”跟随它的特殊字符。
因此,在您的情况下,请使用\$item
。
答案 1 :(得分:3)
您可以使用heredoc:
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'
当然,已经提到的双重标记并逃脱$
标志。
答案 2 :(得分:1)
反斜杠。
echo "var=1
while [ \$var == 1 ]; do
read item
\$item
done
t=2"