これが機能する理由:
$ cat test.sh
#!/bin/bash
cat <(date|awk '{print $1}')
$ ./test.sh
Thu
しかし、bashに渡されたコマンドではありません。
$ bash -c "cat <(date|awk '{print $1}')"
Thu 2 Apr 2020 12:52:10 BST
私はこれをmacOSで実行しています
$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)
Copyright (C) 2007 Free Software Foundation, Inc.
答え1
1行のコードで$1
二重引用符で囲まれた文字列内に、次のように入力します。
"cat <(date|awk '{print $1}')"
これは、対話型シェルを介して拡張されることを意味します。最初の位置引数$1
が空の場合は、空の文字列に展開してawk
プログラムに入力内容のみを印刷させます。
awk '{print }'
シェルが拡張しようとするのを防ぐために脱出してください$
。完全なコマンドは次のとおりです。$1
\$1
bash -c "cat <(date|awk '{print \$1}')"
スクリプトバリアントで$1
一重引用符で囲まれた文字列の内部。したがって、シェルはそれを拡張しようとしません。
しかし、この特別な場合は、単に使用することをお勧めします。
date +%a
曜日の略称を印刷します。strftime(3)
マニュアル()も参照してくださいman 3 strftime
。
最新bash
バージョン(distro 4.2+、つまり基本 bash
macOSでは、以下を介してインストールされます。自分で作った)、
printf '%(%a)T\n' -1
外部コマンドを呼び出さずに同じことを行います。