如何在 bash shell 中查找来自键盘的用户输入?我以为这会起作用,
int b;
scanf("%d", &b);
但是它说
-bash: /Users/[name]/.bash_profile: line 17: unexpected token `"%d",'附近的语法错误
-bash: /Users/[name]/.bash_profile: 第 17 行:`scanf("%d", &b);'
编辑
backdoor() {
printf "\nAccess backdoor Mr. Fletcher?\n\n"
read -r b
if (( b == 1 )) ; then
printf "\nAccessing backdoor...\n\n"
fi
}
只需使用内置的
read
:
read -r b
无需指定类型(根据
%d
),因为变量不会在 shell 脚本中键入,除非您跳过(不必要的)箍来使它们如此;如果你想使用一个值作为小数,这是一个评估它的上下文的问题,而不是它被读取或存储的方式。
例如:
(( b == 1 ))
...将
$b
视为小数,而
[[ $b = 1 ]]
...在 b 和 "1"
之间进行
string 比较。
虽然您可以在 Bash 中将变量声明为整数,但结果不会如您所愿。非整数值将被转换为零,这可能不是您想要的。这是确保您收集整数的更可靠的方法:
while read -p "Enter integer: " integer; do
[[ "$integer" =~ [[:digit:]]+ ]] && break
echo "Not an integer: $integer" >&2
done
当您想通知用户为什么一个值被拒绝时,这特别有用,而不仅仅是重新提示。
你正在尝试将类 C 语法与 Bash 语法混合。
backdoor() {
printf '\n%s\n\n' 'Access backdoor Mr. Fletcher?'
read -r b
if ((b == 1))
then
printf '\n%s\n\n' 'Accessing backdoor...'
fi
}