스크립트에서 인수의 값을 변경하는 방법은 무엇입니까?


11

나는 다음과 같은 작은 간단한 스크립트를 시도했다.

#!/bin/bash
$1="bar"
echo $1

그러나 내가 실행할 때 ./script foo오류가 발생하고 값이 변경되지 않습니다.

/home/mika/script: line 2: foo=bar: command not found
foo

나는 당신이 당신의 스크립트에 전달하는 첫 번째 논쟁은 $ 1이라는 것을 알고 있습니다. 그러나 이것조차도 나는 그 가치를 바꾸고 싶다.


답변:


10

내장을 사용할 수 있습니다 set:

#!/bin/bash
set -- "bar"
echo $1

소스 및 추가 정보 : 명령 행 인수-bash를 변경하십시오 .


나는 그것을 시도했지만 여전히 "foo"를 울렸다. 다른 결과를 얻었습니까? "foo"를 스크립트에 전달하십시오.
Marty Fried

@MartyFried Ups, 죄송합니다 ... 방금 답변을 업데이트했습니다.
Radu Rădeanu

작동합니다. :-) 좋은 대답 ... 나는 그가 그렇게하고 싶지 않다고 가정하고 있다고 생각합니다. 왜 그런지 잘 모르겠지만, 당신의 대답은 실제로 그렇게하지 않는 제 제안보다 더 정확합니다. 링크 주셔서 감사합니다.
Marty Fried

4

해당 변수를 직접 변경할 수 없습니다. 넌 말할 수있다:

x=$1
echo $x

그런 다음 $x대신 사용할 수 있습니다

를 사용하면 $1=bar을 첫 번째 매개 변수로 즉시 대체 $1할 수 있으며, 기본적으로 "foo=bar"이며 변수 "foo"가 아니라 "foo"명령으로 해석됩니다.


좋은 생각이지만 OP가 달성하기를 원하는 것이 무엇인지에 달려 있습니다.
Radu Rădeanu

2

사용을 사용하지 마십시오 $1,이에 대한bash 및 기타 쉘$1 는 스크립트에 전달하는 첫 번째 인수입니다.

#!/bin/bash
echo $1

위와 같이 실행 하면 첫 번째 인수이므로 foo.sh hello인쇄됩니다 hello. 또한 변수를로 참조 var하고 변수의 내용을 로 참조하십시오 $var. 따라서 예상되는 동작을 얻으려면 변수에 다른 이름을 사용하고 $다음을 사용하지 마십시오 .

#!/bin/bash
var="bar"
echo $var

이 작은 스크립트는 사람들이 내가 원하는 것을 이해하게하는 예일뿐입니다. 나는 당신이 당신의 스크립트에 전달하는 첫 번째 논쟁은 $ 1이라는 것을 알고 있습니다. 그러나 이와 같이 값을 변경하고 싶습니다. 이것을 다른 큰 스크립트에 적용해야합니다. 감사합니다.
user258266

@ user258266 없습니다. 새로운 값으로 큰 스크립트를 호출하기 만하면 $1변경하려는 값 에는 사용하지 마십시오 . 어쨌든 구문 오류를 해결하는 한 작동하지만 주요 문제는을 사용하고 있다는 것 $입니다.
terdon

하지만 필요한 이유는 ... 여기에서 설명 할 수없는 이유는 ... 아마도 질문을 수정하겠습니다.
user258266

@ user258266하십시오. $foo="bar"작동하지 않는 변수를로 설정하려고 foo="bar"합니다 $.
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.