2017-12-13 14 views
-1

私はいくつかのファイルをソートするスクリプトを作成しようとしていますが、シェル(Debianはダッシュと思われる)で手動で作業していますが、スクリプトと同じコードを実行すると、 2行目と3行目から「不正な置換」を取得します。私が見つけ変数からの不正置換エラー

#!/bin/bash 
LAST_MONTH="${date +'%Y%m' -d 'last month'}" 
LAST_MONTH_HYPHEN="${date +'%Y-%m' -d 'last month'}" 

すべてがSO異なるシェルに関連しているように見えたので、私は#!/bin/bashと同様#!/bin/shを試してみました。私はまた./filesorter.shbash filesorter.shsh filesorter.shとしてスクリプトを実行しようとしました、そしてすべての順列は私の中括弧は、括弧ために同じ「悪い置換」をテーマ

filesorter.sh: line 2: ${date +'%Y%m' -d 'last month'}: bad substitution 
filesorter.sh: line 3: ${date +'%Y-%m' -d 'last month'}: bad substitution 

答えて

2

変動に関するいくつかのバリエーションを提供します。

LAST_MONTH="$(date +'%Y%m' -d 'last month')" 
LAST_MONTH_HYPHEN="$(date +'%Y-%m' -d 'last month')" 

カーリーブレースは、${var}のように、変数の置換のために$varと同等です。かっこは、$(command arg1 arg2)のように、コマンド置換のためのものです。

Shellcheckは、シェルスクリプトの構文をチェックするのに最適なツールです。スクリプトを与えた場合、それは言う:

SC2154dateは(コマンドの出力のために、"$(date ...)"を使用)参照されますが割り当てられていません。