我使用以下脚本将多个文件复制到一个文件夹中:
{ echo $BASE1; echo $BASE2; echo $BASE3; } | parallel cp -a {} $DEST
有没有办法只使用一个带有大括号扩展的 echo $BASE ?
我的意思是这样的:
{ echo $BASE{1..3} } | parallel cp -a {} $DEST
答案1
您可以使用数组:
BASES[0]=...
BASES[1]=...
BASES[2]=...
# or BASES+=(...)
# or BASES=(foo bar baz)
echo "${BASES[@]}" | parallel cp -a {} $DEST
为了使其更安全(特别是变量中的空格和换行符),类似这样的操作应该更可靠:
printf "%s\0" "${BASES[@]}" | parallel -0 cp -a {} "$DEST"
注意:数组不在 POSIX 中,但这适用于当前版本的 bash 和 ksh。
答案2
您可以使用,printf
代替echo
来获取所需的换行符:
env printf "%s\n" $BASE{1..3} | parallel cp -a {} $DEST