标签: here-string

无法为此处文档创建临时文件:权限被拒绝

[注意:这个类似的 Q涉及相同的 bash 错误消息。它被标记为另一个 Q的副本。但是因为我发现这个错误的来源非常不同,我将在下面回答我自己的问题。]

这个以前工作的 bash 脚本行

while ... do ... done <<< "$foo"
Run Code Online (Sandbox Code Playgroud)

有一天开始产生此错误消息:

无法为此处文档创建临时文件:权限被拒绝

bash permissions here-string

13
推荐指数
2
解决办法
2万
查看次数

使用 bash -c 与使用 here 字符串相比有什么优势?

使用bash -c 'some command'过度使用有什么真正的好处bash <<< 'some command'

他们似乎达到了同样的效果。

bash here-string

11
推荐指数
1
解决办法
1350
查看次数

为什么 wc &lt;&lt;&lt;"$string" 显示的长度比 printf "$string" 长一个字节 | 厕所?

偶然地,我发现这wc取决于它如何从 bash 获取输入的不同:

$ s='hello'
$ wc -m <<<"$s"
6
$ wc -c <<<"$s"
6
$ printf '%s' "$s" | wc -m
5
$ printf '%s' "$s" | wc -c
5
Run Code Online (Sandbox Code Playgroud)

这是 - 恕我直言令人困惑 - 行为记录在某处吗?wc这里算什么- 这是一个假定的换行符吗?

bash newlines wc here-string

11
推荐指数
2
解决办法
3017
查看次数

为什么用 bash 而不是 zsh 剪切失败?

我创建了一个带有制表符分隔字段的文件。

echo foo$'\t'bar$'\t'baz$'\n'foo$'\t'bar$'\t'baz > input
Run Code Online (Sandbox Code Playgroud)

我有以下脚本命名 zsh.sh

#!/usr/bin/env zsh
while read line; do
    <<<$line cut -f 2
done < "$1"
Run Code Online (Sandbox Code Playgroud)

我测试一下。

$ ./zsh.sh input
bar
bar
Run Code Online (Sandbox Code Playgroud)

这工作正常。但是,当我将第一行更改为调用时bash,它失败了。

$ ./bash.sh input
foo bar baz
foo bar baz
Run Code Online (Sandbox Code Playgroud)

为什么这会失败并bash与 一起使用zsh

其他故障排除

  • 在 shebang 中使用直接路径而不是env产生相同的行为。
  • 管道使用echo而不是使用 here-string<<<$line也会产生相同的行为。即echo $line | cut -f 2
  • 使用awk而不是cut 适用于两个外壳。即<<<$line awk '{print $2}'

bash zsh quoting whitespace here-string

10
推荐指数
3
解决办法
3535
查看次数

here document 和 here string 的目的有什么区别?

在 bash 中,在我看来,此处的文档和此处的字符串都可用于提供字符串作为标准输入输入。这里的文档可能会提供额外的功能来指定分隔符,我不确定在任何情况下是否有必要。

他们的目的有什么区别?一个总是可以在另一个使用的地方使用吗?我们什么时候使用哪个?谢谢。

bash io-redirection here-document here-string

7
推荐指数
1
解决办法
993
查看次数

如何将 bash &lt;&lt;&lt; 运算符与 diff 一起使用?

请注意:

$ diff <(echo a) <<<b
diff: missing operand after '/dev/fd/63'
diff: Try 'diff --help' for more information.
Run Code Online (Sandbox Code Playgroud)

我知道<(...)效果很好:

$ diff <(echo a) <(echo b)
1c1
< a
---
> b
Run Code Online (Sandbox Code Playgroud)

我也知道<<<一般情况下效果很好:

$ cat <<<a
a
Run Code Online (Sandbox Code Playgroud)

那么正确的调用方法是什么diff

bash here-string

7
推荐指数
2
解决办法
1858
查看次数

ksh88 中是否有 Here-Strings?

我想从 ksh 脚本中 3 个不同变量的变量中提取 3 个单词。我在 ksh93 上使用了这条线,效果很好:

read A B C <<< $line

在 ksh88 上运行上述命令时出现此错误:

syntax error at line ## : '<' unexpected

如何在 ksh88 上执行相同的操作?

ksh here-string

6
推荐指数
2
解决办法
897
查看次数

将命令的输出读入 Bash 中的变量更有效或推荐什么?

如果要将系统命令的单行输出读入 Bash shell 变量,则至少有两个选项,如下例所示:

  1. IFS=: read user x1 uid gid x2 home shell <<<$(grep :root: /etc/passwd | head -n1)

  1. IFS=: read user x1 uid gid x2 home shell < <(grep :root: /etc/passwd | head -n1)

这两者有什么区别吗?什么更有效或推荐?


请注意,阅读/etc/passwd文件只是为了举例。我的问题的重点是这里的字符串过程替换

linux bash process-substitution here-string

6
推荐指数
2
解决办法
775
查看次数

这个命令到底发生了什么?

当我使用该命令时,cat <<< Hey > text.txt text.txt我希望它在文件 text.txt 中写入“嘿”,然后显示该文件。但是没有输出。bash 实际上是如何解释它的?

命令及其输出:

$ cat <<< Hey > text.txt text.txt
$ cat text.txt
$
Run Code Online (Sandbox Code Playgroud)

io-redirection cat here-string

5
推荐指数
1
解决办法
230
查看次数

区分两个变量的优雅方式?

我有 $a 和 $b。我想跑diff那些。

我想出的最好的是:

diff <(cat <<<"$a") <(cat <<<"$b")
Run Code Online (Sandbox Code Playgroud)

但我觉得我缺少一个聪明的 Bash 语法来做到这一点(如“你为什么不只使用 foo?”)。

bash diff io-redirection here-string

4
推荐指数
1
解决办法
1万
查看次数