gpt4 book ai didi

shell - 使用反引号时如何在 KornShell 脚本中保留空格?

转载 作者:行者123 更新时间:2023-12-01 11:52:56 26 4
gpt4 key购买 nike

我正在使用 KornShell (ksh) 编写脚本。我的数据库连接是通过 SQLPLUS 连接到 Oracle 9i 数据库。我在将 DB 值放入 shell 变量中没有遇到任何问题,除了任何连续的空格会自动截断为一个字符。

这是我的代码示例:

MY_VAR=`sqlplus -s usr/pass@db << !
set heading off;
set pagesize 0;

select a_value from a_table where an_index = 25;
!`

数据库中的实际数据是这样的:

Dec 15 09:19:10 <24:0070> User record (5    XATY       41839FG8   58775HK9AFF) is invalid for this condition

我上面的代码示例返回如下:

Dec 15 09:19:10 <24:0070> User record (5 XATY 41839FG8 58775HK9AFF) is invalid for this condition

间距对于我正在使用的内容至关重要。

预先感谢您的帮助。

最佳答案

首先,不要使用反引号,根据 1995 年出版的“The New Kornshell Programming Language”,它们已被弃用!相反,使用易于嵌套的命令替换版本,$( yourCmd goes here)

您没有向我们展示您是如何使用变量 $MY_VAR 的。如果你说

echo $MY_VAR > outputFile

您需要引用变量,即

print -- "$MY_VAR" > outputFile

Print 是 ksh 对 echo 的重大升级,但最好养成在命令和要 print 的字符串之间使用“--”的习惯>。您要打印的字符串中的任何“-”字符都可以抛出一个不 protected (即没有“--”)print 命令来循环。

您可能还需要引用对 MY_VAR 的赋值,即

MY_VAR="$(sqlplus -s usr/pass@db <<-EOD
set heading off;
set pagesize 0;

select a_value from a_table where an_index = 25;
EOD
)"

我已经切换到 EOD,因为 ! char 被许多 shell 用于符号,如 !$(上一行的最后一个词),所以为什么要混淆这些东西。

future 注意事项:您可以在 StackOverflow 上使用此处的 ksh 标签。 Shell 非常模糊,可以表示 Windows cmd.com 以及 zsh。

希望对您有所帮助。

关于shell - 使用反引号时如何在 KornShell 脚本中保留空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9589091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com