我提到了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
这里怎么了?
您正在为此命令分配OUTPUT变量
"${OUTPUT_INLINE}" | sed "s|\<|$PREFIX|g"
这没什么意思。使用已经在OUTPUT_INLINE
变量中进行的操作来分配命令的输出。
OUTPUT=$(echo -n "${OUTPUT_INLINE}" | sed "s|\<|$PREFIX|g")
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