파일에서 읽은 문자열을 큰따옴표 안에 넣습니다.

파일에서 읽은 문자열을 큰따옴표 안에 넣습니다.

Bash 스크립트에서 일부 16진수 숫자가 포함된 입력 파일을 읽고 있습니다. 그런 다음 이 문자열을 실행 파일에 대한 명령줄 인수로 전달하고 싶습니다.

말해보세요, 이건 내꺼예요 test.txt:

278dca53f96014be
6c39b2d481e75f0a
38e5942f6bd0c71a

스크립트를 통해 읽고 있습니다.

i=0
while read line || [ "$line" ]; do
    arr[$i]="$line"
    i=$((i+1))
done < test.txt

max=2
for n in `seq 0 $max`
do
s=${arr[$n]}
./main -o $s
done

보시다시피 숫자는 명령줄 옵션으로 전달됩니다 ./main.

$s이제 문제는 큰따옴표 안에 넣어야 한다는 것입니다 . 나는 이것을 시도했습니다 :

$t='"'
$s=$t$s$t

하지만 작동하지 않습니다.

작동시키는 방법에 대한 아이디어가 있습니까?

답변1

test.txt의견을 보면 귀하의 파일이 Windows 시스템의 파일이고 DOS 텍스트 파일인 것처럼 들립니다 . 로 변환해야 합니다 dos2unix. 또는 다음을 수정 tr -d '\r' <test.txt | head -n 3하여 head -n 3 test.txt.


텍스트 줄이 포함된 파일이 있고 main다음 줄의 처음 세 줄 각각에 대해 한 번씩 스크립트/프로그램을 호출해야 합니다.

head -n 3 test.txt | xargs -n 1 main -o

만약 너라면진짜인수의 일부로 큰따옴표가 필요합니다(비정상적임).

head -n 3 test.txt | xargs -I XX main -o '"XX"'

main한 번 전화해파일의 줄을 사용하십시오.

xargs -n 1 main -o <test.txt

답변2

사용암소 비슷한 일종의 영양 sed~의e평가주문하다:

sed 's#^#./main -o &#e' test.txt

형식이 잘못된 경우 앞에 코드를 추가하면 됩니다. 예를 들어 첫 번째 줄의 형식을 "./main -o 27 8d ca 53 f9 60 14 be", 다음과 같이 작동합니다.

sed 's/../& /g;s#^#./main -o &#e' test.txt

관련 정보