在运行以下命令时#!/bin/bash
xterm -e "echo 123;read ANSWER;echo answer=$ANSWER;sleep 5"
我在 xterm 窗口中得到这些结果(无论我输入什么来读取)。
123
answer=
所以它永远不会将我的输入存储到变量ANSWER中。
我确信这与运行多个命令有关xterm -e
。
帮助?
答案1
我的猜测是,您在其中执行 xterm 命令的 bash 实例$ANSWER
在将该变量传递给 xterm 之前已经解析了该变量。
要么转义美元符号,要么在表达式两边使用单引号。这似乎对我的情况有效。
更新-语法:
xterm -e "echo 123;读取答案;echo answer=\$ANSWER;sleep 5"
或者
xterm -e 'echo 123;读取答案;echo answer=$ANSWER;sleep 5'
如果在 xterm 调用之前 ANSWER 为空,则这等效于您的语法:
xterm -e "echo 123;阅读答案;echo answer=;sleep 5"
如您所见,变量被解析为值,并且永远不会进入 xterm。此外,在 xterm 命令内运行的 bash 是完全分离的,变量或其值无法轻易传递到其范围之外。
答案2
这是一个引用问题:
xterm -e 'echo 123;read ANSWER;echo answer=$ANSWER;sleep 5'
您需要内部的 shellxterm
才能看到文字$
- 而不是通过当前的 shell 来扩展它。