2015-01-05 3 views
1

특수한 번호를 찾는 스크립트를 만들고 싶습니다.스크립트 변수가 tr에 있음

번호와 같은이 153 = 1^3 + 5^3 + 3^3

나는이 좀 일이 153 세

(153) 내 스크립트에서

bash는 스크립트

echo "$1" | tr -d " " | sed -e 's/\([[:digit:]]\)/\1+/g' | tr '+' '^"$2"+' 

마지막 명령이 작동하지 않으며 변경 되더라도 변경됩니다. 1+5+3+ to 1^+5^+3^+

그럼 내 질문입니다 : tr에 변수를 어떻게 사용할 수 있습니까?

+0

나는'sed' 여기에 더 적합 할 것입니다 ... – ciuak

+0

첫 번째 작업이 정확히 무엇을 달성하고자 적어 생각합니다. 배쉬는 잊어 버려 컴퓨터가 전자를 사용한다는 사실을 잊어 버려라. 어떤 입력으로 어떤 결과가 나오는지 정의하십시오. 그것을 아주 명확하게 정의하십시오. 그러면 대부분의 작업이 완료 될 것입니다. –

답변

1

tr은 한 문자를 다른 문자로 바꿉니다. 한 문자를 긴 문자열로 대체 할 수는 없습니다. 그건 sed 님의 직업입니다 :

set -- 153 3 
echo "$1" | \ 
    tr -d " " | \ 
    sed -e 's/\([[:digit:]]\)/\1^'"$2"'+/g; s/\+$//' 
0

쵸 로비에 의한 답변은 정확합니다.

$ set -- 153 3 
$ python -c "print '+'.join([x+'^$2' for x in list('$1')])" 
1^3+5^3+3^3 

설명 :

  1. 리스트 문자열로 변환한다 "153"
  2. ['1', '5', '3'] 내지 [X + < 목록 >에서 X에 대한 '^ $ 2']라고 여기 파이썬 기반 한 라이너 목록 이해력. 효과적으로 다른 목록을 반환 ['1^3', '5^3', '3^3']
  3. 그런 '+'

참고로 가입이 빌드 함수에 의해 처리 후 완성 된 문자열을 조정할 필요하지 않습니다, 때문에 나는이 대답을 추가하는 유일한 이유가 있었다. 다음은

는 다른 일반적인 방법은 다음과 같습니다

$ python -c "print '^$2+'.join(list('$1')) + '^$2'" # Add "^3" after join returns "1^3+5^3+3" 
$ echo $1 | sed "s/./&^$2+/g; s/+$//" # Remove last '+' sign from "1^3+5^3+3^3+"