이 모든 명령을 더 나은 배열로 실행하고 싶습니다. 어떻게 해야 합니까?
# bash script of "copyall.sh"
scp /local/michael.txt [email protected]:~/
scp /local/jason.txt [email protected]:~/
scp /local/jerry.txt [email protected]:~/
scp /local/wong.txt [email protected]:~/
scp /local/lee.txt [email protected]:~/
scp /local/mark.txt [email protected]:~/
예를 들어 JavaScript를 통해 이 작업을 쉽게 수행할 수 있습니다. 이름을 배열이나 개체에 넣은 다음 해당 배열/개체에 넣으면 됩니다. 하지만 배쉬는 어떻습니까?
답변1
여기에는 변수가 필요하지 않습니다.
scp /local/michael.txt /local/jason.txt /local/jerry.txt \
/local/wong.txt /local/lee.txt /local/mark.txt \
[email protected]:~/
중괄호 확장을 사용할 수도 있습니다.
scp /local/{michael,jason,jerry,wong,lee,mark}.txt [email protected]:~/
답변2
for
생성자를 사용할 수도 있습니다 bash
.
for name in michael jason jerry wong lee mark; do
scp "/local/${name}.txt" [email protected]:~/
done
그러면 scp
각 이름에 대해 한 번씩 행이 실행되고 ${name}
현재 이름으로 대체됩니다.
bash
명시적 배열도 지원되므로 다음과 같이 할 수 있습니다.
names=( michael jason jerry wong lee mark )
for name in "${names[@]}"; do
scp "/local/${name}.txt" [email protected]:~/
done
@choroba의 답변에서 지적했듯이 scp
여러 인수가 지원되므로 단일 명령으로 이 작업을 보다 효율적으로 수행할 수 있습니다.