首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对巴什来说等同于扫描?

对巴什来说等同于扫描?
EN

Stack Overflow用户
提问于 2012-05-22 00:11:27
回答 3查看 32.6K关注 0票数 4

如何从bash中的键盘查找用户输入?我在想这样能行,

代码语言:javascript
复制
int b;

scanf("%d", &b);

但上面写着

-bash: /-bash/name/.-bash_profile:第17行:"%d",' -bash: /Users/[name]/.bash\_profile: line 17:扫描意外令牌附近的语法错误(“%d”&b)

编辑

代码语言:javascript
复制
backdoor() {
   printf "\nAccess backdoor Mr. Fletcher?\n\n"
   read -r b
   if (( b == 1 )) ; then
     printf "\nAccessing backdoor...\n\n"
   fi   
}
EN

回答 3

Stack Overflow用户

发布于 2012-05-22 00:14:54

只需使用read内置:

代码语言:javascript
复制
read -r b

不需要指定类型(按照%d),因为变量不是在shell脚本中键入的,除非您跳过(不必要)循环才能这样做;如果要将值用作十进制值,这是一个计算它的上下文的问题,而不是读取或存储它的方式。

例如:

代码语言:javascript
复制
(( b == 1 ))

...treats $b作为小数,而

代码语言:javascript
复制
[[ $b = 1 ]]

...does a字符串比较b和"1".

票数 7
EN

Stack Overflow用户

发布于 2012-05-22 00:19:29

虽然您可以在Bash中将变量声明为整数,但是结果不能满足您的期望。一个非整数值将被转换为零,这可能不是你想要的.下面是确保收集整数的一种更好的防弹方法:

代码语言:javascript
复制
while read -p "Enter integer: " integer; do
    [[ "$integer" =~ [[:digit:]]+ ]] && break
    echo "Not an integer: $integer" >&2
done

当您想要通知用户值被拒绝的原因时,这一点尤其有用,而不仅仅是重新提示。

票数 2
EN

Stack Overflow用户

发布于 2012-05-22 00:32:16

你想把C类语法和Bash语法混在一起。

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10694224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档