bash 세레도크 내의 변수 사용
배시 유전자의 내부에 변수를 삽입하려고 합니다
var=$1
sudo tee "/path/to/outfile" > /dev/null << "EOF"
Some text that contains my $var
EOF
이 동작은 예상대로 되지 않습니다($var
확장되지 않고 문자 그대로 처리됩니다).
사용할 필요가 있다sudo tee
파일을 만들려면 sudo가 필요하기 때문입니다.다음과 같은 작업을 수행합니다.
sudo cat > /path/to/outfile <<EOT
my text...
EOT
동작하지 않습니다.>outfile
sudo를 사용하지 않는 현재 셸의 파일을 엽니다.
첫 번째 질문에 대한 답변으로 딜리미터를 따옴표로 묶었기 때문에 파라미터 대체는 없습니다.bash 매뉴얼에는 다음과 같이 기재되어 있습니다.
이 문서의 형식은 다음과 같습니다.
<<[-]word here-document delimiter
워드에서는 파라미터 확장, 명령어 대체, 산술 확장 또는 경로명 확장이 수행되지 않습니다.단어의 문자가 따옴표로 묶인 경우 딜리미터는 단어에서 따옴표를 제거한 결과이며 이 문서의 행은 확장되지 않습니다.단어를 따옴표로 묶지 않으면 이 문서의 모든 행이 매개 변수 확장, 명령 대체 및 산술 확장됩니다. [...]
사용할 첫 번째 예를 변경하는 경우<<EOF
대신<< "EOF"
효과가 있다는 걸 알게 될 거야
두 번째 예에서는 셸이 호출합니다.sudo
매개 변수를 사용하여만cat
리다이렉션은 의 출력에 적용됩니다.sudo cat
원래 사용자로 사용합니다.다음과 같이 시도하면 효과가 있습니다.
sudo sh -c "cat > /path/to/outfile" <<EOT
my text...
EOT
따옴표 사용 안 함<<EOF
:
var=$1
sudo tee "/path/to/outfile" > /dev/null <<EOF
Some text that contains my $var
EOF
변수 확장은 here-docs 내의 기본 동작입니다.이 동작을 무효로 하려면 , 라벨에 따옴표를 붙입니다(단일 따옴표 또는 이중 따옴표 포함).
이전 답변의 늦은 귀결로서 모든 변수를 보간할 수는 없지만 일부 변수를 보간할 수 있는 상황이 될 수 있습니다.백슬래시를 사용하여 달러 기호와 백틱을 이스케이프하거나 정적 텍스트를 변수에 넣을 수 있습니다.
Name='Rich Ba$tard'
dough='$$$dollars$$$'
cat <<____HERE
$Name, you can win a lot of $dough this week!
Notice that \`backticks' need escaping if you want
literal text, not `pwd`, just like in variables like
\$HOME (current value: $HOME)
____HERE
데모: https://ideone.com/rMF2XA
견적 메커니즘은 다음과 같습니다.\____HERE
또는"____HERE"
또는'____HERE'
--는 모든 변수 보간을 해제하고 여기서 설명하는 텍스트를 리터럴 텍스트로 바꿉니다.
일반적인 작업은 로컬 변수를 다른 셸, 프로그래밍 언어 또는 원격 호스트에 의해 평가되어야 하는 스크립트와 결합하는 것입니다.
local=$(uname)
ssh -t remote <<:
echo "$local is the value from the host which ran the ssh command"
# Prevent here doc from expanding locally; remote won't see backslash
remote=\$(uname)
# Same here
echo "\$remote is the value from the host we ssh:ed to"
:
언급URL : https://stackoverflow.com/questions/4937792/using-variables-inside-a-bash-heredoc
'programing' 카테고리의 다른 글
shell 명령어를 명령어 출력의 각 행에 적용하려면 어떻게 해야 합니까? (0) | 2023.04.22 |
---|---|
git 클론:인증에 실패했습니다. (0) | 2023.04.22 |
탐색 막대의 테두리를 신속하게 제거하는 방법은 무엇입니까? (0) | 2023.04.22 |
TextBox에서 입력 시 뷰모델 명령 실행 (0) | 2023.04.17 |
외부 파일 또는 어셈블리에서 WPF 스타일 또는 기타 정적 리소스 로드 (0) | 2023.04.17 |