【问题标题】:How do you add flag in $() in bash [duplicate]如何在 bash 中的 $() 中添加标志 [重复]
【发布时间】:2020-03-23 19:51:59
【问题描述】:

我有以下 bash 脚本,似乎 -n 标志在 echo 中总是被解释为字符串

echo Hello, who am I talking to?
read login_name
login_name=$(echo -n $login_name | base64)
echo $login_name | base64 --decode

我该如何纠正,或者我的脚本还有其他更好的语法吗?

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    最好使用更便携的printf 而不是echo -n 并使用read -p 并正确引用;

    read -p 'Hello, who am I talking to? ' login_name
    login_name=$(printf '%s' "$login_name" | base64)
    printf '%s' "$login_name" | base64 --decode
    echo
    

    PS:只是为了澄清在$(...) 中使用任何标志并没有什么特别之处,因此可以像这样使用它:

    dt=$(date -u '+%Y/%m/%d')
    echo "$dt"
    

    【讨论】:

    • 我需要在没有从 echo 中返回的行的情况下进行编码,这就是我添加 -n 的原因,你的代码是否删除了换行符
    • 这里$(...) 没有什么特别之处。可以使用:dt=$(date -u '+%Y/%m/%d')
    • 如果你可以添加一个答案来演示如何在 $() 中添加标志,我会标记 +1
    • @FanCheung 与$( )无关,与echo有关。 echo 的某些版本,如果它们的第一个参数以“-”开头,则将其解释为标志。有些没有。基本上,尝试将标志选项传递给echo 或将其与以“-”开头的字符串一起使用是不安全的。 printf 使用起来更复杂,但更可预测和可控。
    • 感谢@GordonDavisson 确实有助于理清思路
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    相关资源
    最近更新 更多