まあ、私が試した方法では明らかに不可能です。
この選択肢を得ることができますバーただし、結果の文字列は有効です。
#!/bin/bash
path1=/usr/tmp/foo/bar/baz
awk -F/ '{print $5}' <<< "$path1"
これまでは大丈夫です。しかし、<<<
演算子と悪名高いパイプを使用したくない場合はecho | ...
どうすればよいですか?簡単に言えば、私がやりたいことは、path1
ディレクティブを変数として渡すことです。-v pa="$path1"
そして次-F/
のフィールド区切り記号とフィールド識別子を使用して$5
解析されます。awk
内部 pa
値が次のような変数外部 path1
シェル変数。 「社内」でも可能awk
ですか?
ベストアンサー1
-v
オプションや引数var=value
の問題awk
は、ANSI Cエスケープシーケンス(例えば、\n
... \b
)が拡張され(GNU awk
4.2以降では値がで始まり@/
終わった場合は、/
正規表現型の変数として扱われます。)。
もう 1 つの方法は、以下を使用またはARGV
配置ENVIRON
awk
することです。
awk -F / 'BEGIN{$0 = ARGV[1]; print $5}' "$path1"
または:
export path1
awk -F / 'BEGIN{$0 = ENVIRON["path1"]; print $5}'
または:
path1="$path1" awk -F / 'BEGIN{$0 = ENVIRON["path1"]; print $5}'
今、あなたが望むものがシェル変数を分割することであれば、これは必要ないかもしれませんawk
。
すべてのPOSIXシェルで:
IFS=/; set -f
set -- $path1
printf '%s\n' "$5"