Bash linux:访问包含空间的目录

Bash linux:访问包含空间的目录,bash,shell,whitespace,Bash,Shell,Whitespace,在脚本中,我有一行 #!/bin/sh log="${var}logs/console logs/since2_%m-%d-%Y.log" # <-- console logs has a space 取消它周围的引号,转义引号使它尝试查找包含字符“我认为log=“${var}logs/console\logs/since2\u%m-%d-%Y.log”应该可以。再试一次 这个想法是为了避开[SPACE]我认为log=“${var}logs/console\logs/since2\u%

在脚本中,我有一行

#!/bin/sh

log="${var}logs/console logs/since2_%m-%d-%Y.log" # <-- console logs has a space
取消它周围的引号,转义引号使它尝试查找包含字符“

我认为
log=“${var}logs/console\logs/since2\u%m-%d-%Y.log”
应该可以。再试一次
这个想法是为了避开[SPACE]

我认为
log=“${var}logs/console\logs/since2\u%m-%d-%Y.log”
应该可以工作。再试一次

其思想是转义[SPACE]

变量$IFS包含字段分隔符,默认情况下是空格,因此请尝试使用

oldifs="$IFS"
IFS="
"

log="${var}logs/console logs/since2_%m-%d-%Y.log"

# do whatever you want with $log now

IFS=$oldifs

变量$IFS包含字段分隔符,默认情况下是空格,请尝试使用

oldifs="$IFS"
IFS="
"

log="${var}logs/console logs/since2_%m-%d-%Y.log"

# do whatever you want with $log now

IFS=$oldifs

您遇到的问题可能是在使用$log的地方,您可能应该使用“$log”来保留空格。

您遇到的问题可能是在使用$log的地方,您可能应该使用“$log”“保留空格。

问题不在于问题中引用了什么。下面是一个有效的示例脚本。除了定义之外,请注意$log用法的引号。如果您需要进一步的帮助,请发布完整的脚本或一个最小的工作子集,人们可以运行它来重现问题

#!/bin/sh
var=/tmp/
log="${var}logs/console logs/since2_%m-%d-%Y.log"
mkdir -p "$log"
rmdir "$log"
fortune | tee "$log"
echo ----
cat "$log"

问题不在于问题中引用了什么。下面是一个有效的示例脚本。除了定义之外,请注意$log用法的引号。如果您需要进一步的帮助,请发布完整的脚本或一个最小的工作子集,人们可以运行它来重现问题

#!/bin/sh
var=/tmp/
log="${var}logs/console logs/since2_%m-%d-%Y.log"
mkdir -p "$log"
rmdir "$log"
fortune | tee "$log"
echo ----
cat "$log"

如果您打算在该文件名中包含今天的日期:

log="$(date "+${var}logs/console logs/since2_%m-%d-%Y.log")"
touch "$log"

我建议您使用
%Y-%m-%d
,因为它可以按年代和词汇进行排序。

如果您希望在该文件名中包含今天的日期:

log="$(date "+${var}logs/console logs/since2_%m-%d-%Y.log")"
touch "$log"


我建议您使用
%Y-%m-%d
,因为它可以按时间和词汇进行排序。

不起作用,我得到的结论是:
tee:logs/since2\u%m-%d-%Y.log没有这样的文件或目录
no,它将到达名为
console\logs
的目录,带有…-e-backslash-space-l-…不起作用,我得到以下信息:
tee:logs/since2\u%m-%d-%Y.log没有这样的文件或目录
no,它将到达名为
console\logs
,带有…-e-backslash-space-l-…的目录不起作用,我得到以下信息:
tee:logs/since2\u%m-%d-%Y.log没有这样的文件或目录
,如果这解决了您的问题,请考虑接受它作为答案-感谢不起作用,我得到这个:<代码> TE:日志/ 2%%M%%D-%Y.不记录这样的文件或目录< /代码>如果这解决了你的问题,请考虑接受它作为答案-感谢没有工作<代码> /Sistel.SH:第5行:log=/home /duk/aa/Serv/demo/var /日志/控制台日志/ Sn2%%M%%D-%Y.LOG:没有这样的文件或目录< /C> >同意,日志的定义就可以了,但当你在另一个语句中使用$log时,它将被解释为单独的单词,而不加引号。@Kevin:karmakaze的答案是正确的。如果您仍然有问题,则在脚本的另一部分。发布整个脚本。除了使用值“$log”作为参数外,设置log=“…”时还需要引号。@凯文:始终在变量替换周围使用双引号(除非您打算将变量的值拆分为多个字,并将每个字视为全局模式)
tail-n0-f-s0.01“$ladderlog”|“$parser”|(虽然为true;do“$tron”--userconfigdir“$userconfigdir”--vardir“$var”;done)-tee-a“$log”
不起作用
/starter.sh:line 5:log=/home/duke/aa/servers/demo/var/logs/console-logs/since2\u%m-%d-%Y.log:没有这样的文件或目录
同意,日志的定义就可以了,但当你在另一个语句中使用$log时,它将被解释为单独的单词,而不加引号。@Kevin:karmakaze的答案是正确的。如果您仍然有问题,则在脚本的另一部分。发布整个脚本。除了使用值“$log”作为参数外,设置log=“…”时还需要引号。@凯文:始终在变量替换周围使用双引号(除非您打算将变量的值拆分为多个字,并将每个字视为全局模式)
tail-n0-f-s0.01“$ladderlog”|“$parser”|(如果为true,则执行“$tron”--userconfigdir“$userconfigdir”--vardir“$var”;完成)| tee-a“$log”
我认为您需要提供更多信息,也许是一个简单的测试程序。您显示的某些错误消息无法与代码一起出现。@Seth下面提供了这些消息。我认为您需要提供更多信息,可能是一个简单的测试程序。您显示的某些错误消息无法与代码一起出现。@Seth下面提供了+1这是一个很好的示例:它(1)在将值分配给“log”时引用该值,以及(2)在将“$log”作为参数展开时使用引号。+1这是一个很好的示例:它(1)在将值分配给“log”时引用该值,以及(2)在展开时使用引号“$log”作为参数。