저는 사용자에게 정보를 요청하고 이를 변수로 저장하여 다른 명령에 매개 변수로 전달하는 간단한 스크립트를 작성하고 있습니다. 변수 중 하나는 공백을 포함할 수 있는 경로를 저장합니다. 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"
변수는 값에 공백이 있는지 여부에 관계없이 단일 인수로 확장됩니다.