【问题标题】:How to pass variable within printf如何在 printf 中传递变量
【发布时间】:2017-03-24 09:05:40
【问题描述】:

我正在尝试在 printf 中回显一个变量。我首先使用下面的命令提示用户输入

printf 'Specify lrus [default 128]:         ' ;read -r lrus

接下来它会再次提示用户查看他是否想要使用上一个问题的输入:

printf 'Are you sure you want $lrus lrus:       ' ;read -r ans

例如,输出将如下所示:

Specify lrus [default 128]:     60
Are you sure you want 60 lrus:  yes

上面的输出是我想要实现的,允许使用 printf 将前一个输入变量传递给下一个问题。

【问题讨论】:

  • 使用双引号:printf "..."

标签: linux shell unix aix


【解决方案1】:

你可以试试这个;

printf 'Are you sure you want '${lrus}' lrus:       ' ;read -r ans

printf "Are you sure you want ${lrus} lrus:       " ;read -r ans

【讨论】:

    【解决方案2】:

    您的问题是您使用的是单引号。参数不在单引号内展开。

    不过,参数用双引号展开:

    printf "Are you sure you want $lrus lrus: "
    

    请注意,无需单独打印;最好将-p 参数用于read(一方面,它了解您的终端宽度):

    read -p "Specify lrus [default 128]: " -r lrus
    read -p "Are you sure you want $lrus lrus? " -r ans
    

    【讨论】:

      【解决方案3】:

      使用printf 时,请使用格式说明符。把%s放在你想要你的值去的地方,然后把值放在下一个参数中:

      printf 'Are you sure you want %s lrus:       '  "$lrus"
      read -r ans
      

      这比使用双引号将变量注入printf 格式字符串更安全、更健壮。如果您使用双引号,您将无法写出包含例如的变量。 100%:

      $ var='100%'; printf "Value is $var"
      bash: printf: `%': missing format character
      
      $ var='100%'; printf "Value is %s" "$var"
      Value is 100%
      

      【讨论】:

        【解决方案4】:

        根据the SC2059

        不要在 printf 格式字符串中使用变量。使用 printf "..%s.." “$foo”。

        你可以使用:

        printf "Are you sure you want %s lrus: " "$lrus"
        

        【讨论】:

          猜你喜欢
          • 2010-11-06
          • 2021-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-29
          相关资源
          最近更新 更多