echo
는 backslash escape(\)
를 만나도 문자 그대로 출력합니다.
$ echo "Hello\nWorld\n"
Hello\nWorld\n
$
기본적으로 개행이 들어가 있으나 -n
옵션을 주게되면 개행하지 않습니다.
$ echo -n "Hello\nWorld\n"
Hello\nWorld\n$
cd(change directory)
는 주어진 상대 또는 절대 경로로 current working directory
를 이동합니다.
$ cd [eirectory]
만약 해당 디렉토리가 없다면 에러 메시지를 출력합니다.
bash: cd: directory: No such file or directory
절대경로
절대경로는 루트디렉토리부터 이동할 목표 폴더까지 모든 경로를 다입력해서 이동하는 방법 입니다.
$ cd /home/desktop
상대경로
상대경로는 내가 현재 소속된 디렉토리에서 목표 디렉토리로 바로 이동할 때 사용하는 방법 입니다.
.
: 현재 위치까지 경로 요약
..
: 상위 폴더로 한 단계 이동
현재 경로가 /home/desktop
일 경우
$ cd ../../practice
desktop
-> home
-> /
두 번을 상위 폴더로 이동 후 practice
폴더로 이동합니다. 즉, 현재 경로는 /practice
가 됩니다.
상대경로 사용시 ./
기호는 생략 할 수 있습니다.
/home
이고 /home/desktop
으로 이동하려는 경우./
기호를 포함
$ cd ./desktop
./
기호를 생략
$ cd desktop
동일한 결과를 나타냅니다.
현재 디렉토리를 알고 싶을 때 사용하는 명령어입니다.
전역 변수 설정 및 조회를 합니다.
사용자 환경 변수를 전역 변수로 설정합니다. 옵션 없이 사용했을 경우 환경변수 목록을 출력합니다.
환경변수로 설정한 값을 지워줍니다.
shell을 종료합니다.
명령어를 분리하는 기능을 합니다. 앞 명령어 결과와 관계없이 다음 명령을 실행합니다.
$ echo "Hello" ; echo "World"
Hello
World
$ echo2 "Hello" ; echo "World"
bash: echo2: command not found
World
앞 명령어에서 나온 명령 결과를 두 번째 명령에서 사용합니다. 즉, 어떤 프로세스의 표준 출력이 다른 프로세스의 표준 입력으로 쓰이게 되는 것입니다.
$ echo "Hello" | echo "World"
World
$ echo2 "Hello" | echo "World"
World
bash: echo2: command not found
각 명령어가 차례대로 실행하되, 앞 명령어 결과가 True일 경우에만 다음 명령을 실행하게 됩니다.
$ echo "Hello" && echo "World"
Hello
World
$ echo2 "Hello" && echo "World"
bash: echo2: command not found
각 명령어가 차례대로 실행하되, 앞 명령어 결과가 False일 경우에만 다음 명령을 실행하게 됩니다.
$ echo "Hello" || echo "World"
Hello
$ echo2 "Hello" || echo "World"
World
bash에서 따옴표는 숫자나 문자를 구분하기 위한 용도가 아닙니다. 1234
나 '1234'
, "1234"
는 모두 같은 스트링 문자열입니다.
따옴표는 공백으로 나누어진 문자를 합치거나, 공백을 유지하거나, 특수 문자 등을 스트링으로 사용할 때 문자를 묶는 역할을 합니다.
환경 변수를 설정해 둔 뒤 값을 테스트해보면 결과가 다른 것을 알 수 있습니다.
$str="World"
참고로 $str='World'
, $str=World
의 값은 같습니다.
작은따옴표로 감싸진 문자열은 변화 없이 그대로 출력되는 것을 확인할 수 있습니다.
$ echo 'hello $str'
hello $str
$ echo '"'
"
$ echo '\'
\
참고로 이스케이프 문자(\)
도 그래도 인식되기 때문에 작은따옴표로 묶인 문자열에 \
을 써서 작은따옴표 자체를 넣으려고 한다면 원하는 결과가 나오지 않습니다.
$ echo 'Why can'\''t I write '"'"'s between single quotes'
# |-------| |----------| |-----------------------|
Why can't I write 's between single quotes
이스케이프와 큰따옴표로 쿼우트된 작은 따옴표에 의해 3개의 문자열로 나뉘어진 것 입니다.
큰따옴표로 감싸진 문자열은 변수가 실제 값으로 치환된 후 출력되는 것을 알 수 있습니다. 특정 문자의 경우 \
를 사용해 출력할 수 있습니다.
$ echo "hello $str"
hello world
$ echo "\""
"
echo "\\"
\
변수를 치환할 필요가 있는지 등에 따라서 작은따옴표를 사용하거나 큰따옴표를 사용해야 할 것 같습니다.
명령어 실행 전, I/O가 redirect 될 수 있습니다. 명령어의 파일이 복제, 열기, 닫기 등의 기능을 할 수 있게 제공합니다.
명령어를 수행하면 stdin이 file에 연결됩니다.
$ wc -l < infile
2
위 명령어는 infile에 있는 행의 수를 출력하게 됩니다.
명령어를 수행하면 stdout이 file에 연결됩니다.
$ ls -al n> outfile
ls -al n> outfile
명령어 뒤에 숫자를 써주게 되면 fd값이 n을 파일에 연결하게 됩니다.
명령어를 수행하면 stdout이 file에 연결되고, 해당 명령어의 수행 결과가 파일에 이어써집니다.
여러줄의 input을 받게되는데, 탈출문을 만나기 전까지 input이 stdin과 redirect됩니다.
$ ls -al << EXIT > outfile
your
multi-line
text goes
here
EXIT
순서를 확인하기 위해서 직접 연결해서 확인해 봤을 때 이해가 잘 가지 않아서 고생을 했었습니다.
참고