如何通过paste合并Bash变量输出且不使用临时文件?
解决paste合并变量输出的问题
问题出在你使用的paste <($dummy) <($val)写法:<()是进程替换语法,它要求括号内是可执行的命令,但你把命令输出的文本内容存到了变量里,$dummy和$val是文本而非命令,shell会把它们当作命令名去查找,自然执行失败。
正确的做法是用echo(或printf)将变量中的内容输出,把变量内容转化为进程输出后再传给paste:
paste <(echo "$dummy") <(echo "$val")
务必给变量加上双引号"$dummy"和"$val",这样能保留变量内的换行符与空格,确保paste可以按行对应合并内容。
另外建议用更易读的现代语法$()代替反引号来赋值变量:
val=$(awk -F "\"" '{print $2}' ~/.cache/wal/colors-wal-dwm.h | sed -n -e 1,3p -e 5,7p) dummy=$(printf "dwm.normfgcolor:\ndwm.normbgcolor:\ndwm.normbordercolor:\ndwm.selfgcolor:\ndwm.selbgcolor:\ndwm.selbordercolor:")
内容的提问来源于stack exchange,提问作者Vinchy
相关产品推荐
相关产品推荐

