bash 脚本 - 在 cat 中使用和扩展变量
bash script - use and expand variable in cat
在我的 bash 脚本中我有这个:
myapphome=/home/username/Documents/myapp
cat << 'EOT' > "$myapphome"/some.properties
dir.root="$myapphome"/app_data
EOT
预计在 some.properties:
dir.root=/home/username/Documents/myapp/app_data
但实际上是:
dir.root="$myapphome"/app_data
我这里做错了什么?我的意思是我想在我的 some.properties 文件中扩展 $myapphome。
如果要bash在here文档中展开变量,不要引用终止符:
cat << EOT > "$myapphome"/some.properties
dir.root=$myapphome/app_data
EOT
此外,请从此处文档中删除双引号,它们不会被扩展删除。
参见man bash
:
If EOT
is unquoted, all lines of the here-document are subjected to parameter expansion, command substitution, and arithmetic expansion, the character sequence \<newline>
is ignored, and \
must be used to quote the characters \
, $
, and `
.
只需删除终止符中的单引号。当您不想在 heredoc 中扩展变量时使用引号:
cat << EOT > "$myapphome"/some.properties
dir.root=$myapphome/app_data
EOT
您可能还想删除变量周围的双引号 ;)
在我的 bash 脚本中我有这个:
myapphome=/home/username/Documents/myapp
cat << 'EOT' > "$myapphome"/some.properties
dir.root="$myapphome"/app_data
EOT
预计在 some.properties:
dir.root=/home/username/Documents/myapp/app_data
但实际上是:
dir.root="$myapphome"/app_data
我这里做错了什么?我的意思是我想在我的 some.properties 文件中扩展 $myapphome。
如果要bash在here文档中展开变量,不要引用终止符:
cat << EOT > "$myapphome"/some.properties
dir.root=$myapphome/app_data
EOT
此外,请从此处文档中删除双引号,它们不会被扩展删除。
参见man bash
:
If
EOT
is unquoted, all lines of the here-document are subjected to parameter expansion, command substitution, and arithmetic expansion, the character sequence\<newline>
is ignored, and\
must be used to quote the characters\
,$
, and`
.
只需删除终止符中的单引号。当您不想在 heredoc 中扩展变量时使用引号:
cat << EOT > "$myapphome"/some.properties
dir.root=$myapphome/app_data
EOT
您可能还想删除变量周围的双引号 ;)