Dando seguimento a sua pergunta anterior , parece que você quer tanto um texto não-interpretada e algum texto interpretado entrar em um arquivo. Nesse caso, use dois cats diferentes echo:
cat > /test <<'EOF'
some uninterpreted text $(pwd)
not substituted: $1
EOF
cat >> /test <<EOF
but this will substitute: $1
EOF
Há algumas coisas acontecendo aqui: primeiro, a sintaxe do heredoc<< . Se você incluir aspas nessa sequência terminadora, como na primeira acima, todo o heredoc não será interpretado - sem parâmetros e sem substituições. Se você não usar aspas, como no segundo cat acima, variáveis como $1serão substituídas por seus valores e substituições de comandos serão incluídas no texto. Você escolhe entre citar a sequência "EOF" ou não, com base em se deseja ou não substituições.
Para colocar os dois cats no mesmo arquivo, estamos usando o >> redirecionamento para o segundo (e mais tarde) redirecionamentos: isso significa anexar ao arquivo. Para o primeiro, usamos um único >para limpar o arquivo e começar do zero.
Observe que, mesmo quando as variáveis são substituídas , quaisquer cifrões adicionais no valor dessa variável não são re-substituídos:
foo='$bar'
bar=hello
cat <<EOF
$foo
EOF
irá produzir:
$bar
sem substituir $baro valor de.
No entanto, se você estiver fornecendo um "$" no argumento para todo esse script, precisará escapá-lo na linha de comando ou incluir tudo entre aspas simples. Como alternativa, a substituição de comandos , como em sua outra pergunta, permite inserir diretamente o conteúdo de um arquivo inteiro, incluindo quaisquer cifrões no conteúdo do arquivo. Certifique-se de citar a cadeia de substituição aqui:
oo.sh "$(cat myfile)"
obterá o corpo de myfilecomo $1e pode então catou echocomo necessário. As mesmas limitações da minha resposta são aplicáveis: há um limite para quanto tempo os argumentos da linha de comando podem durar e se o seu arquivo pode demorar mais do que isso, você deve encontrar outra abordagem. Você pode descobrir qual é o limite no seu sistema comgetconf ARG_MAX
$1) contém cifrões.' Não se for o primeiro parâmetro da linha de comandos. A substituição foi realizada antes que seu script fosse executado. Você tem que escapar na linha de comando.