2016-12-02 6 views
1

でその値を渡すためにbashスクリプトで変数を展開しますエラー: PHP Notice: Undefined variable: ff in Command line code on line 1。​​のように見えますが、拡張としてではありません。​​の代わりにffの拡張子を渡すにはどうすればよいですか?は、私はシェルスクリプト、次の書かれている単一引用符

+1

'ls'は必要ありません:for ff in * .mkv * .mp4 * .avi' – fedorqui

+0

@fedorquiありがとうございましたが、これに関する問題はありませんでした。 –

答えて

1

お試しください:'echo ph_dct_videohash("'$ff'");'

'$ff'は文字通り​​が、"$ff"と​​が可変ffの値に展開)。

更新。 (空白を含む名前のための)より正確なアプローチ:

for ff in *.mkv *.mp4 *.avi; do 
    echo "Processing $ff" 
    php -r 'echo ph_dct_videohash("'"$ff"'");' 
done 

'echo ph_dct_videohash("'"$ff"'");'は常にphpのために一つの引数に展開され、PHPコードに$文字を追加する(ため'...'の)追加的なシェル変数展開を起こさないでしょう。

+0

'php -r" echo ph_dct_videohash( '$ ff'); ''ファイル名を空白で扱うほうが良いかもしれません。 – yolenoyer

+0

ここに 'ls'の後に空白がついたファイル名は壊れてしまいますが、 : 'a' '1 2'; '[' $ a ']'のfに対して; echo "$ f"; done'は '[1'と' 2] 'の2行を生成します。 –

0

はただ単に​​評価の前に引用符を元に戻すと、このように、その後、それらを再開:ファイル名にスペースが含まれている場合、そのまま

php -r 'echo ph_dct_videohash("'$ff'");' 

これは動作しません。その他の答えは、forに直接ワイルドカードを使用して「lsの出力を使用しない」に対処しました。私はそれらの言い換えをしません。

+0

'$ ff'を引用符で囲まないことは悪い考えです。 – chepner

+0

あなたは正しいです。正解のために編集されていますが、既存のより良い回答をコピーする必要はありません。 –

1

変数を渡していません。あらゆる種類の問題とセキュリティ上のリスクを伴うPHPコマンドを動的に構築しようとしています。

実際に(PHP自体の私の知識が少し欠けている

for ff in *.mkv *.mp4 *.avi; do 
    echo "Processing $ff" 
    php -r 'echo ph_dct_videohash($argv[1]);' "$ff" 
done 

のようなものを使用し、引数としてPHPに値を渡すために、あなたは多くの私のPHPコードを調整する必要がありますが、コール

関連する問題