0

我一直在四处寻找(无济于事)以执行以下操作:

我想在给它一个值之后显示并能够在必要时在运行时为 Unix shell 脚本编辑变量的内容。这个想法是这样的:

假设我们有一个在脚本中定义或由用户输入定义的变量值

var=12345

打印变量值,但也将光标留在打印位置,然后按回车键使其保持不变或在运行时输入新值

编辑变量内容(按 Enter 保持不变):1 2345

在运行时的这一点上,我想将光标留在数字 1 的位置,同时显示变量,并且如果按 Enter 键,则保留原始内容 (12345) 或读取其中的新值相同的地方并修改。在输入除 Enter 之外的任何内容时清除变量的显示将是一大优势。

我已经四处寻找一种方法来做到这一点,但没有找到任何东西。有人愿意提供解决方案吗?

4

2 回答 2

1

我建议您以另一种方式执行此操作:

var=12345
echo "Change the value of Var (current value: $var)"
read -p "New value (Press Enter to skip):" nvar
if [[ "$nvar" != "" ]]; then
    var="$nvar"
fi
echo $var

有了这个,它会提示:

Change the value of Var (current value: 12345)
New value (Press Enter to skip):

您在问题中想要的(没有“大加号”部分)也可以实现:

var=12345
echo -ne "Now you may want to change the value: \n$var\r"
read nvar
if [[ "$nvar" != "" ]]; then
    var="$nvar"
fi
echo $var

有了这个,它会提示(光标位于之间**

Now you may want to change the value: 
*1*2345
于 2013-10-03T17:31:33.790 回答
0

使用 bash,您可以使用 readline 选项read,但这不会将光标放在开头。但是它确实可以满足您的要求

var=12345
read -ep "Enter new value: " -i $var var

如果您需要光标返回,您可以这样做:

var=12345
prompt="Enter new value: $var"
for ((i=1; i<=${#var}; i++)); do prompt+=$'\b'; done
read -p "$prompt" new
[[ -z $new ]] && new=$var
于 2013-10-03T17:44:43.187 回答