有没有更好的方式来逃避一倍(或逃跑两次)在BASH用户输入比调用printf的两倍? [英] Is there a better way to double escape (or escape twice) user input in BASH than calling printf twice?

查看:146
本文介绍了有没有更好的方式来逃避一倍(或逃跑两次)在BASH用户输入比调用printf的两倍?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

该脚本将读取一个古老而来自用户的新值,然后使用SED查找并在文件中替换它们。例如,如果我进入了T * T * Z和B * B *ž它看起来对于T \\ * T \\ * Z在文件中,并为B \\ * B \\ * Z取代。它的工作原理,但我一直在试图使这个更简洁。

This script will read an old and a new value from the user and then use sed to find and replace them in a file. For example if I entered T*T*z and B*B*z it would look for T\*T\*z in the file and replace with B\*B\*z. It works but I've been trying to make this more concise.

我没有任何需要的中间变量$ ESC_OLD_PW和$ ESC_NEW_PW。是否有更多的 明智办法做到这一点?

I don't have any need for the intermediate variables $ESC_OLD_PW and $ESC_NEW_PW. Is there a more sensible way to do this?

    #!/bin/bash
    read -sp "Old:" OLD_PW && echo
    read -sp "New:" NEW_PW && echo

    # Add escape characters to what user entered
    printf -v ESC_OLD_PW "%q" "${OLD_PW}"
    printf -v ESC_NEW_PW "%q" "${NEW_PW}"

    # Escape again for the sed evaluation.
    printf -v ESC_ESC_OLD_PW "%q" "${ESC_OLD_PW}"
    printf -v ESC_ESC_NEW_PW "%q" "${ESC_NEW_PW}"

    sed -i -e s/"${ESC_ESC_OLD_PW}"/"${ESC_ESC_NEW_PW}"/g $1

我试过以下内容:

I've tried the following:

    ~$ OLD_PW="T*T*z"
    ~$ printf "%q" $OLD_PW | xargs printf "%q"
    printf: %q: invalid conversion specification
    ~$

和我试过在管道的事情很多变化成的printf ...有什么建议?

And I've tried many variations on piping things into printf... Any suggestions?

推荐答案

中间变量免费电话:

sed -i -e "s/$(printf '%q' $(printf '%q' $OLD_PW))/$(printf '%q' $(printf '%q' $NEW_PW))/g" $1

这篇关于有没有更好的方式来逃避一倍(或逃跑两次)在BASH用户输入比调用printf的两倍?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆