7

コマンドの出力を変数に割り当てる必要があります。私が試したコマンドは次のとおりです。

grep UUID fstab | awk '/ext4/ {print $1}' | awk '{print substr($0,6)}'

このコードを試して変数を割り当てます。

UUID=$(grep UUID fstab | awk '/ext4/ {print $1}' | awk '{print substr($0,6)}')

ただし、構文エラーが発生します。さらに、bashスクリプトで機能させたいです。

エラーは次のとおりです。

./upload.sh: line 12: syntax error near unexpected token ENE=$( grep UUID fstab | awk '/ext4/ {print $1}' | awk '{print substr($0,6)}'
 )'

./upload.sh: line 12:   ENE=$( grep UUID fstab | awk '/ext4/ {print $1}' | awk '{print substr($0,6)}'
 )'
4

2 に答える 2

14

'$()'サブシェル演算子を使用することは、bashコマンドの出力を取得するための一般的な方法です。サブシェルにまたがっているため、それほど効率的ではありません。

私は試した :

UUID=$(grep UUID /etc/fstab|awk '/ext4/ {print $1}'|awk '{print substr($0,6)}')
echo $UUID # writes e577b87e-2fec-893b-c237-6a14aeb5b390

それは完璧に動作します:)

編集:

もちろん、コマンドを短くすることもできます。

# First step : Only one awk
UUID=$(grep UUID /etc/fstab|awk '/ext4/ {print substr($1,6)}')

もう一度:

# Second step : awk has a powerful regular expression engine ^^
UUID=$(cat /etc/fstab|awk '/UUID.*ext4/ {print substr($1,6)}')

ファイル引数::でawkを使用することもできます。

# Third step : awk use fstab directlty
UUID=$(awk '/UUID.*ext4/ {print substr($1,6)}' /etc/fstab)
于 2012-07-17T17:46:14.253 に答える
2

トラブルシューティングの目的で、これを機能させることができるかどうかを確認するために、「バックティック」を使用することもできます。

cur_dir=`pwd`

コマンドの出力をpwd変数cur_dirに保存しますが、$()一般的にはアプローチを使用することをお勧めします。

http://unix.stackexchange.comで私に与えられたページから引用するには:

2番目の形式`COMMAND`(バックティックを使用)は、ネスト(「内部」バックティックをエスケープする必要がある)と文字のエスケープに問題があるため、Bashでは多かれ少なかれ廃止されています。使用してください$(COMMAND)、それはPOSIXでもあります!

于 2012-07-17T17:45:02.543 に答える