Seb*_*b S 9 script shell-script bash-scripting
举个例子:
List="A B C D"
for I in $List
do
OUT=$OUT" -$I"
done
Run Code Online (Sandbox Code Playgroud)
当我运行它时,结果是:
" -A -B -C -D"
Run Code Online (Sandbox Code Playgroud)
但希望它是:
"-A -B -C -D"
Run Code Online (Sandbox Code Playgroud)
如何在没有前导空格的情况下进行连接?
顺便说一句,这是脚本的参数列表。
Mar*_*eed 14
使用条件参数扩展:
List="A B C D"
for I in $List
do
OUT=${OUT:+$OUT }-$I
done
Run Code Online (Sandbox Code Playgroud)
${OUT:+$OUT }如果 OUT 未设置或为空,则表达式扩展为空;如果它被设置为某物,那么它会扩展为后跟一个空格的某物。
但是,这种操作 - 将空格分隔的字符串视为列表 - 充满了可能的问题:引用,值本身意外包含空格等。最好使用数组:
List=(A B C D)
for I in "${List[@]}"
do
OUT=${OUT:+$OUT }-$I
done
Run Code Online (Sandbox Code Playgroud)
根据您正在使用的内容$OUT,将其设置为数组也可能是有意义的:
List=(A B C D)
OUT=()
for I in "${List[@]}"; do
OUT+=("-$I")
done
Run Code Online (Sandbox Code Playgroud)
然后,您将使用"${OUT[@]}"将数组的元素作为单独的参数传递给另一个命令。
要返回到您的原始版本,在这种特定情况下,您也可以完全使用sed并跳过 bash 循环:
OUT=$(sed -E 's/^| /&-/g' <<<"$List")
Run Code Online (Sandbox Code Playgroud)