【发布时间】:2017-07-02 01:37:33
【问题描述】:
我的问题与to this one 类似,但并非如此。
问题是我的脚本中有变量会直接在前一个旁边回显/打印控制字符。不幸的是,我必须在变量之间放置空格,否则一切都会被误解,但这也行不通,因为它们之间不能有空格。
str="25 cents"
one=1
two=2
printf "\x3${one},${two}${str}\x30"\
(没有空格这个字符串搞砸了)
printf "\x3${one},${two}%s\x30" "${str}" # outputs "5 cents"
所以它最终要么是" 25 cents "(错误),要么是"5 cents"(错误x 2)......应该是:
25 cents
我几乎尝试了所有方法,转义变量,将它们放在引号中,但没有运气。显然有一种我不知道的正确方法来处理这个问题,所以任何帮助都很好 - 谢谢。
【问题讨论】:
-
我不明白。您能否在没有
one和two变量的情况下给出示例(仅使用数字),这样我就可以看到您要对转义序列做什么? -
@Jack:当然,
printf "\x31,2<String>\x30"...所以发生的情况是<String>(25 美分)前面或后面的任何数字都会导致转义/控制代码出现问题(@987654331 @ 将变为\x31,225 cents ...)。 -
我认为您需要重新阅读 ansi 颜色代码序列。数字后面有一个
m,序列由ESC [引入(如\x1b[31,2m)。 -
不够清楚但您应该使用
echo而不是printf。因为当您使用%s和printf时,您当然必须用空格分隔字符串,然后将其传递给printf -
请说明输出应该是
25 cents还是225 cents。