명령 출력을 변수 [중복]으로 설정하는 스크립트

명령 출력을 변수 [중복]으로 설정하는 스크립트

저는 사용자에게 정보를 요청하고 이를 변수로 저장하여 다른 명령에 매개 변수로 전달하는 간단한 스크립트를 작성하고 있습니다. 변수 중 하나는 공백을 포함할 수 있는 경로를 저장합니다. read명령 레이블을 사용하면 -r경로가 백슬래시 이스케이프 문자를 무시하고 "원시" 입력으로 검색됩니다.

예를 들어:

read -p "Enter checksum algorithm number (1, 224, 256, 384, 512, 512224, 412256): " -a shaa
read -p "Enter a file path: " -re shapath

문제는 이스케이프 문자를 읽지 않고는 이러한 매개변수를 사용하여 명령을 실행하는 방법을 알 수 없다는 것입니다. @heemayl에 따라 해결됨

그런 다음 명령의 출력 또는 반환 값을 다른 변수로 저장해야 합니다.

예를 들어:

foo=$(shasum -a "$shaa" "$shapath")

그러나 echo $foo예상되는 결과를 얻지 못하면 shasum -a "$shaa" "$shapath"대신에shasum: /.../checksum.dmg

다음과 같이 사용하고 파이핑하여 eval작동하게 만들 수 있었습니다 var.

eval shasum -a $sha $shapath > val

eval나는 어떤 대가를 치르더라도 그것을 피해야 하며 스크립트를 계속 진행할 수 없다는 것을 읽었습니다 .

답변1

따옴표 사용:

shasum -a "$sha" "$shapath"

변수는 값에 공백이 있는지 여부에 관계없이 단일 인수로 확장됩니다.

관련 정보