난 로렌아줌마가 저장한 파일을 읽을 수 있는 것이 아니라, 가변적입니다 데릭쉐퍼드와 계속 가변으로 인쇄하십시오 아웃해야 절실해졌습니다. How can I do this? 하지만 나는 이 스크립트입니다 기록되었으므로 isn& # 39, t 꽤 내가 필요합니다.
#!/bin/sh
while read LINE
do
echo $LINE
done <$1
echo 11111-----------
echo $LINE
내 스크립트입니다 줄 수 있어, 파일 이름으로 매개변수에서 따라서, 예를 들어, 이 파일에 " aaaa", 인쇄할 수 있지 않을까 생각한다 "고 말했다.
aaaa
11111-----
그러나 이 그냥 내가 원하는 파일을 저장할 때 화면에 관용으로충만하신 를출력합니다 붙여넣습니다 가변으로! 이렇게 쉬운 방법이 있나요?
플랫폼, 가장 낮은 공통 분모 'sh' 에서 사용할 수 있습니다.
#!/bin/sh
value=`cat config.txt`
echo "$value"
배시 (bash 츠시 ',' 또는 '에서' 전체 'cat' 로 파일을 실행하지 않고도 읽을 수 있는 변수.
#!/bin/bash
value=$(<config.txt)
echo "$value"
'고양이' 에서 '배시' 또는 '소리내어 먹는다' 를 호출하는 츠시 파일 약간만이라도 것으로 [cat 의 쓸모없는 사용] (https://web.archive.org/web/20160711205930/http ://porkmail.org/era/unix/award.html).
참고 필요는 없다고 유지하기 위해 대체 제안하십시오 명령 줄 바꿈.
참조: [Bash Hacker& # 39 에 Wiki - 명령 대체 - 특선] (http://wiki.bash-hackers.org/syntax/expansion/cmdsubst # 특선).
특히 두 가지 중요한
무시됨 있던 다른 답변을 통해 지금까지:
이 문제로 남아있었다.
value="$(cat config.txt)"
(단, '읽기' 기반 솔루션 유형에 대한 솔루션뀉뀉뀉뀉.
개확장 절감뿐만) 은 명령 줄 바꿈.
S="$(printf "a\n")"
printf "$S" | od -tx1
출력:
0000000 61
0000001
이 소박한 읽는 방법을 스스로 파일:
FILE="$(mktemp)"
printf "a\n\n" > "$FILE"
S="$(<"$FILE")"
printf "$S" | od -tx1
rm "$FILE"
POSIX 해결하십시오. 덮어쓰기/추가 챨 명령에 대한 추가 확장 및 분리하십시오 후:
S="$(cat $FILE; printf a)"
S="${S%a}"
printf "$S" | od -tx1
출력:
0000000 61 0a 0a
0000003
거의 POSIX 해결하십시오. ASCII 인코딩합니다. 아래 참조.
[꾨т 臾몄젣媛? 란 Bash 운행에서어떠한 저장하였습니다 NUL 문자를 com/go/4e6b330a_kr] (https://stackoverflow.com/questions/6570531/assign-string-containing-null-character-0-to-a-variable-in-bash).
'읽기' 이 모두 저하됨 확장 및 솔루션, 내가 잘 모르는 don& # 39, 모든 문제에 대한 해결 방법이 있습니다.
예:
printf "a\0b" | od -tx1
S="$(printf "a\0b")"
printf "$S" | od -tx1
출력:
0000000 61 00 62
0000003
0000000 61 62
0000002
Ha, 우리의 NUL 사라졌어요!
해결 방법:
ASCII 인코딩합니다. 아래 참조.
사용, ',' $ " bash 확장명은 " 리터럴:
S = $ " a\0b"; printf " $ S"; od tx1 -
유용하게 사용할 수 없는 리터럴, 그래서 판독값 파일에서 사용할 수 있습니다.
Uuencode base64 인코딩되지 버전의 파일을 저장할 수 있는 모든 변수 및 디코딩합니다 전에 사용:
FILE="$(mktemp)"
printf "a\0\n" > "$FILE"
S="$(uuencode -m "$FILE" /dev/stdout)"
uudecode -o /dev/stdout <(printf "$S") | od -tx1
rm "$FILE"
출력:
0000000 61 00 0a
0000003
uuencode 및 데코드 있다 [POSIX 7] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/uuencode.html # tag_20_148) 12.04 unbuntu 있지만 기본적으로 ('마르티우스' 패키지). # 39, t 지켜보리니 don& 내가 POSIX 7 process) ',' 대체 확장명은 () 이 배시 위한 대안 < 먹어서나 제외한 다른 파일.
물론 이것은 불편한 것, 그래서 내가 느리고, 실제 그 답을 찾을 수 있습니다. 배시 (bash, 문자 입력 파일을 사용할 경우 t # 39 don& nul 포함할 수 있습니다.
치로 틸리 (유라유라테이코쿠 로 뒤진 대체 명령을 사용하여 떨어질 줄 바꿈. 그러나 후행 문자를 사용하기 위한 추가 해결하십시오 그들의 훌륭한 상당 기간 결심한 후 내가 필요한 명령을 사용하여 하나의 솔루션으로 didn& # 39, 대체 전혀 없다.
[내 외곽진입] [2] 이제 '읽기' 에서는 '함께' # 39 의 printf builtin& 'v' 플래깅 읽기 위해 직접 stdin 콘텐트입니다 변수다.
# Reads stdin into a variable, accounting for trailing newlines. Avoids needing a subshell or
# command substitution.
read_input() {
# Use unusual variable names to avoid colliding with a variable name
# the user might pass in (notably "contents")
: "${1:?Must provide a variable to read into}"
if [[ "$1" == '_line' || "$1" == '_contents' ]]; then
echo "Cannot store contents to $1, use a different name." >&2
return 1
fi
local _line _contents
while read -r _line; do
_contents="${_contents}${_line}"$'\n'
done
_contents="${_contents}${_line}" # capture any content after the last newline
printf -v "$1" '%s' "$_contents"
}
이 汲摹窍妨绰 투입물 없이 후행 줄 바꿈.
사용 예시:
$ read_input file_contents < /tmp/file
# $file_contents now contains the contents of /tmp/file
[2]: # bash-cache.sh-68 https://bitbucket.org/dimo414/bash-cache/src/6702c8f3/bash-cache.sh
1 시간 회선인 루프를 통해 액세스할 수 있습니다.
#!/bin/bash -eu
#This script prints contents of /etc/passwd line by line
FILENAME='/etc/passwd'
I=0
for LN in $(cat $FILENAME)
do
echo "Line number $((I++)) --> $LN"
done
전체 콘텐츠를 파일 복사 (예: line.sh). Autoexec. "' chmod +x line.sh ./line.sh "'