Bash를 사용하여 변수 세트로 동일한 명령을 어떻게 실행할 수 있나요?

Bash를 사용하여 변수 세트로 동일한 명령을 어떻게 실행할 수 있나요?

이 모든 명령을 더 나은 배열로 실행하고 싶습니다. 어떻게 해야 합니까?

# 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여러 인수가 지원되므로 단일 명령으로 이 작업을 보다 효율적으로 수행할 수 있습니다.

관련 정보