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

问题描述 投票:0回答:2

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

我想存储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

这里怎么了?

shell
2个回答
1
投票

您正在为此命令分配OUTPUT变量

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

这没什么意思。使用已经在OUTPUT_INLINE变量中进行的操作来分配命令的输出。

OUTPUT=$(echo -n "${OUTPUT_INLINE}" | sed "s|\<|$PREFIX|g") 

1
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.