代码之家  ›  专栏  ›  技术社区  ›  Van Tr

无法将sed的输出分配给变量

  •  0
  • Van Tr  · 技术社区  · 6 年前

    我指的是这个 https://unix.stackexchange.com/questions/251388/prefix-and-suffix-strings-to-each-output-line-from-command 将前缀添加到的输出 ls .

    我想储存这个输出 负载感应 :

    file1
    file2
    file3
    

    对于值为的变量:

    /../file1 /../file2 /../file3
    

    这是我的 .sh 文件:

    PREFIX="/../"
    OUTPUT_INLINE=$(ls | tr "\n" " ")
    OUTPUT="${OUTPUT_INLINE}" | sed "s|\<|$PREFIX|g"
    echo "${OUTPUT_INLINE}"
    echo "${OUTPUT}"
    

    输出为:

    file1 file2 file3
    

    意思是变数 OUTPUT 不包含任何内容。

    即使我这样做了:

    echo "${OUTPUT_INLINE}" | sed "s|\<|$PREFIX|g"
    

    我会得到:

    /../file1/../file2/../file3
    

    这里怎么了?

    2 回复  |  直到 6 年前
        1
  •  1
  •   G. C.    6 年前

    您正在为输出变量分配此命令

    OUTPUT="${OUTPUT_INLINE}" | sed "s|\<|$PREFIX|g"
    

    这没什么意思。 做你已经做过的事 OUTPUT_INLINE 用于指定命令输出的变量。

    OUTPUT=$(echo -n "${OUTPUT_INLINE}" | sed "s|\<|$PREFIX|g") 
    
        2
  •  1
  •   Ry- Vincenzo Alcamo    6 年前
    OUTPUT="${OUTPUT_INLINE}" | sed "s|\<|$PREFIX|g"
    

    管道 OUTPUT="${OUTPUT_INLINE}" 进入之内 sed "s|\<|$PREFIX|g" ,它什么也不做。我想你的意思是:

    OUTPUT=$(printf '%s' "${OUTPUT_INLINE}" | sed "s|\<|$PREFIX|g")
    

    但是在不同的分隔符类型周围有很多脆弱性,您应该能够避免所有这些:

    PREFIX="/../"
    
    for filename in *; do
        printf '%s%s ' "$PREFIX" "$filename"
    done