Bash: For 루프 단일 라인

Bash: For 루프 단일 라인
for i in {1..4}; do echo "Welcome $i";done

제 생각에는

Welcome 1
Welcome 2
.
.

대신 나는 얻는다

welcome {1..4}

안드로이드 터미널 에뮬레이터

답변1

/bin/bash가 아닌 /bin/sh(쉘)에서 실행 중입니다.

$ /bin/sh -c 'for i in {1..4}; do echo "Welcome $i";done'
Welcome {1..4}

이제 bash를 사용해 보세요:

$ /bin/bash -c 'for i in {1..4}; do echo "Welcome $i";done'
Welcome 1
Welcome 2
Welcome 3
Welcome 4

쉘을 선호한다면 Nikolas가 쓴 것을 수행하십시오.

for i in $(seq 4); do echo "Welcome $i" ; done

하지만 Bash를 사용하는 것이 좋습니다.

답변2

을 실행하고 있지 않거나 bash이전 버전의 을 실행 중이 bash거나 중괄호 확장을 이해하지 못하는 셸을 실행 중입니다.

가장 그럴듯한 설명은 터미널 에뮬레이터가 실행 중이 /bin/sh거나 일부 작은 셸이 실행 중이라는 것입니다(대부분 POSIX 호환이기를 바랍니다).

(그리고 중괄호 확장을 지원하는 다른 모든 쉘 에서 bash) 명시적인 for 루프는 암시적인 루프로 변경될 수 있습니다:

printf 'Welcome %d\n' {1..4}

또는

printf 'Welcome %d\n' $(seq 4)

버팀대 확장은 없지만 seq.

답변3

~처럼선행은 이루기가 어렵다bash를 실행하지 않거나 버전이 좋지 않다고 가정해 보세요.최근의. 나는 bash의 이전 버전(어쩌면 관용구가 개발되기 전?)에서 다음을 테스트했으며 다음 sh과도 작동합니다.

for i in `seq 1 4`;do echo "Welcome $i";done

이 정도면 충분합니다.

답변4

이 애플리케이션을 사용하는 경우:안드로이드 터미널 에뮬레이터, "그럼 내장된 Android 셸과 통신하기 위한 터미널 에뮬레이터입니다." 즉, 자신의 bash 버전을 수동으로 설치하지 않은 경우(기기가 이를 루팅해야 합니다. 기기를 루팅하셨나요?) bash가 아닌 기본 Android 셸을 갖게 됩니다. 따라서 Android의 셸 기능 세트만 사용할 수 있으며 다음과 같은 고급 bash 구문 및 기능은 사용할 수 없습니다 {1..4}.

내가 찾은 몇 가지 정보.

관련 정보